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

Cara Membuat Tabel Hanya jika Tidak Ada di PostgreSQL

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).


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sumber Daya Pembelajaran &Pelatihan Teratas PostgreSQL

  2. Simpan keluaran PL/pgSQL dari PostgreSQL ke file CSV

  3. Normalisasi unicode di PostgreSQL 13

  4. Menggunakan psql bagaimana cara membuat daftar ekstensi yang diinstal dalam database?

  5. Masalah pengaturan kunci utama khusus dalam migrasi Rails 4