Di PostgreSQL, Anda dapat menggunakan IF NOT EXISTS
klausa dari CREATE TABLE
pernyataan untuk memeriksa apakah tabel dengan nama yang sama sudah ada di database sebelum membuatnya.
Tabel hanya akan dibuat jika tidak ada tabel lain dengan nama yang sama. Jika tabel sudah ada dengan nama itu, "pemberitahuan" akan dikeluarkan alih-alih kesalahan.
Contoh
Berikut ini contoh untuk didemonstrasikan:
CREATE TABLE IF NOT EXISTS t1 (
c1 INT,
c2 VARCHAR(10)
);
Di sini, t1
adalah nama tabel, dan semua yang berada di antara tanda kurung adalah definisi tabel (yaitu kolom, dll).
Dalam hal ini, tabel hanya akan dibuat jika belum ada yang bernama t1
.
Periksa bahwa Tabel Sekarang Sudah Ada
Kita dapat menanyakan pg_tables
view untuk memeriksa apakah tabel sekarang ada:
SELECT EXISTS (
SELECT FROM
pg_tables
WHERE
schemaname = 'public' AND
tablename = 't1'
);
Hasil:
True
Dalam hal ini saya mendapatkan True
, yang berarti bahwa tabel tersebut memang ada dan saya memiliki akses ke sana.
Tergantung pada konfigurasi Anda, Anda mungkin mendapatkan t
/f
bukannya True
/False
.
Coba Buat Tabel Lagi
Jika kita mencoba membuat tabel itu lagi:
CREATE TABLE IF NOT EXISTS t1 (
c1 INT,
c2 VARCHAR(10)
);
Kami tidak mendapatkan kesalahan, kami mendapat pemberitahuan:
NOTICE: relation "t1" already exists, skipping
Seperti yang diharapkan, pemberitahuan memberi tahu kita bahwa tabel sudah ada.
Tanpa IF NOT EXISTS
Klausa
Inilah yang terjadi jika kita tidak menggunakan IF NOT EXISTS
klausa ketika mencoba membuat tabel yang sudah ada:
CREATE TABLE t1 (
c1 INT,
c2 VARCHAR(10)
);
Kali ini kami mendapatkan kesalahan:
ERROR: relation "t1" already exists
Perhatikan bahwa IF NOT EXISTS
klausa tidak memeriksa struktur/definisi tabel. Ini hanya memeriksa bahwa tidak ada tabel yang ada dengan nama yang sama yang kami coba berikan ke tabel yang kami buat.
Dengan kata lain, hanya karena tabel dengan nama tersebut sudah ada, bukan berarti tabel tersebut memiliki definisi yang benar.
IF NOT EXISTS
fungsionalitas telah ditambahkan di PostgreSQL 9.1 (catatan rilis).