PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Как да създадете последователност, ако не съществува

Postgres 9.5 или по-нова версия

IF NOT EXISTS беше добавен към CREATE SEQUENCE в Postgres 9.5. Това е простото решение сега:

CREATE SEQUENCE IF NOT EXISTS myschema.myseq;

Но все пак помислете за подробностите за остарелия отговор ...
И знаете за serial или IDENTITY колони, нали?

  • Колона на таблицата с автоматично увеличение

Postgres 9.4 или по-стара версия

Последователностите споделят пространството от имена с няколко други подобни на таблица обекта. Ръководството:

Името на последователността трябва да се различава от името на всяка другапоследователност, таблица, индекс, изглед или чужда таблица в същата схема.

Удебелен акцент мой. Така че има три случая:

  1. Име не съществува. -> Създаване на последователност.
  2. Съществува последователност със същото име. -> Да не правиш нищо? Някакъв изход? Някакво регистриране?
  3. Съществува друг конфликтен обект със същото име. -> Направете нещо? Някакъв изход? Някакво регистриране?

Посочете какво да правите и в двата случая. A DO изявлението може да изглежда така:

DO
$do$
DECLARE
   _kind "char";
BEGIN
   SELECT relkind
   FROM   pg_class
   WHERE  oid = 'myschema.myseq'::regclass  -- sequence name, optionally schema-qualified
   INTO  _kind;

   IF NOT FOUND THEN       -- name is free
      CREATE SEQUENCE myschema.myseq;
   ELSIF _kind = 'S' THEN  -- sequence exists
      -- do nothing?
   ELSE                    -- object name exists for different kind
      -- do something!
   END IF;
END
$do$;

Типове обекти (relkind ) в pg_class според ръководството:

r =обикновена таблица
i =индекс
S =последователност
v =изглед
m =материализиран изглед
c =съставен тип
t =TOAST таблица
f =чужда таблица

Свързано:

  • Как да проверите дали таблица съществува в дадена схема


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Postgres и индекси на външни ключове и първични ключове

  2. Преобразувайте шестнадесетичен в текстово представяне в десетично число

  3. Вмъкнете изображение в базата данни на postgresql

  4. PostgreSQL:между с дата и час

  5. PostgreSQL следващата стойност на последователностите?