PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Cara membuat urutan jika tidak ada

Postgres 9.5 atau lebih baru

IF NOT EXISTS telah ditambahkan ke CREATE SEQUENCE di Postgres 9.5. Itulah solusi sederhananya sekarang:

CREATE SEQUENCE IF NOT EXISTS myschema.myseq;

Tetapi pertimbangkan detail dari jawaban yang sudah ketinggalan zaman ...
Dan Anda tahu tentang serial atau IDENTITY kolom, kan?

  • Kolom tabel kenaikan otomatis

Postgres 9.4 atau lebih lama

Urutan berbagi namespace dengan beberapa objek seperti tabel lainnya. Panduan:

Nama urutan harus berbeda dari namaurutan, tabel, indeks, tampilan, atau tabel asing lainnya lainnya dalam skema yang sama.

Penekanan saya yang berani. Jadi ada tiga kasus:

  1. Nama tidak ada. -> Buat urutan.
  2. Urutan dengan nama yang sama ada. -> Tidak melakukan apa-apa? Keluaran apa saja? Ada pencatatan?
  3. Objek lain yang bertentangan dengan nama yang sama ada. -> Lakukan sesuatu? Keluaran apa saja? Ada pencatatan?

Tentukan apa yang harus dilakukan dalam kedua kasus tersebut. Sebuah DO pernyataan bisa terlihat seperti ini:

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

Jenis objek (relkind ) di pg_class sesuai dengan manual:

r =tabel biasa
i =indeks
S =urutan
v =tampilan
m =tampilan terwujud
c =tipe komposit
t =tabel TOAST
f =tabel asing

Terkait:

  • Cara memeriksa apakah ada tabel dalam skema tertentu


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Streaming PostgreSQL vs Replikasi Logis – Perbandingan

  2. Postgres - FATAL:file database tidak kompatibel dengan server

  3. PostgreSQL EXPLAIN – Berapa Biaya Kueri?

  4. Tren PostgreSQL Terbaru:Tugas yang Paling Banyak Menghabiskan Waktu &Metrik Penting untuk Dilacak

  5. Bagaimana saya bisa mengekspor skema database di PostgreSQL?