PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Jak utworzyć sekwencję, jeśli nie istnieje?

Postgres 9.5 lub nowszy

IF NOT EXISTS został dodany do CREATE SEQUENCE w Postgresie 9.5. To teraz proste rozwiązanie:

CREATE SEQUENCE IF NOT EXISTS myschema.myseq;

Ale weź pod uwagę szczegóły nieaktualnej odpowiedzi...
I wiesz o serial lub IDENTITY kolumny, prawda?

  • Automatyczna inkrementacja kolumny tabeli

Postgres 9.4 lub starszy

Sekwencje współdzielą przestrzeń nazw z kilkoma innymi obiektami podobnymi do tabeli. Instrukcja:

Nazwa sekwencji musi różnić się od nazwy każdej innej sekwencji, tabeli, indeksu, widoku lub tabeli obcej w tym samym schemacie.

Moje odważne podkreślenie. Są więc trzy przypadki:

  1. Nazwa nie istnieje. -> Utwórz sekwencję.
  2. Istnieje sekwencja o tej samej nazwie. -> Nic nie robić? Jakieś wyjście? Jakieś logowanie?
  3. Istnieje inny obiekt powodujący konflikt o tej samej nazwie. -> Zrobić coś? Jakieś wyjście? Jakieś logowanie?

Określ, co zrobić w obu przypadkach. DO oświadczenie może wyglądać tak:

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$;

Typy obiektów (relkind ) w pg_class zgodnie z instrukcją:

r =zwykła tabela
i =indeks
S =sekwencja
v =widok
m =widok zmaterializowany
c =typ złożony
t =tabela TOAST
f =tabela obca

Powiązane:

  • Jak sprawdzić, czy tabela istnieje w danym schemacie


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zbędne dane w wyciągach aktualizacyjnych

  2. Jak stworzyć widok w PostgreSQL

  3. Pobieranie listy dat w zakresie w PostgreSQL

  4. Jak mogę wyeksportować schemat bazy danych w PostgreSQL?

  5. Błąd Postgresa podczas aktualizowania danych w kolumnie