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

5 Cara untuk Memeriksa apakah Tabel Ada di PostgreSQL

Berikut adalah lima cara untuk memeriksa apakah ada tabel di database PostgreSQL.

pg_tables Lihat

pg_tables view berisi informasi tentang setiap tabel dalam database.

Kita dapat menggunakannya untuk memeriksa apakah tabel yang diberikan ada di database saat ini:

SELECT EXISTS (
    SELECT FROM 
        pg_tables
    WHERE 
        schemaname = 'public' AND 
        tablename  = 'actor'
    );

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 .

information_schema.tables Lihat

information_schema.tables view berisi semua tabel dan view yang didefinisikan dalam database saat ini yang dapat diakses oleh pengguna saat ini.

Kita dapat menggunakannya untuk memeriksa apakah tabel yang diberikan ada dan bahwa kita memiliki akses ke sana:

SELECT EXISTS (
    SELECT FROM 
        information_schema.tables 
    WHERE 
        table_schema LIKE 'public' AND 
        table_type LIKE 'BASE TABLE' AND
        table_name = 'actor'
    );

Hasil:

True

Cara lain untuk melakukannya adalah dengan menghitung:

SELECT 
    COUNT(table_name)
FROM 
    information_schema.tables 
WHERE 
    table_schema LIKE 'public' AND 
    table_type LIKE 'BASE TABLE' AND
	table_name = 'actor';

Hasil:

1

table_type dapat berupa salah satu dari berikut ini:

BASE TABLE Tabel dasar persisten (tabel normal)
VIEW Lihat
FOREIGN Tabel asing
LOCAL TEMPORARY Tabel sementara

Anda dapat menghilangkan table_type dari filter Anda jika Anda ingin memeriksa apakah nama tersebut ada di semua jenis.

Katalog Sistem

Katalog sistem adalah tempat RDBMS menyimpan metadata skema, seperti informasi tentang tabel dan kolom, dan informasi pembukuan internal.

Di Postgres, katalog sistem adalah tabel biasa.

Kita dapat menggunakan dua di antaranya untuk memeriksa apakah tabel yang diberikan ada:

SELECT EXISTS (
    SELECT FROM 
        pg_catalog.pg_class c
    JOIN 
        pg_catalog.pg_namespace n ON 
        n.oid = c.relnamespace
    WHERE  
        n.nspname = 'public' AND 
        c.relname = 'actor' AND 
        c.relkind = 'r'
    );

Hasil:

True

relkind dari r adalah untuk meja biasa .

Anda dapat menghapus relkind filter sama sekali jika Anda hanya ingin memeriksa apakah suatu objek sudah memiliki nama yang ingin Anda berikan ke tabel atau belum.

Atau Anda dapat memfilter menurut jenis lain.

Berikut pilihannya:

r meja biasa
i indeks
S urutan
t Tabel TOAST
v lihat
m tampilan terwujud
c jenis komposit
f tabel asing
p tabel yang dipartisi
I indeks yang dipartisi

The to_regclass() Fungsi

to_regclass() fungsi menerjemahkan nama relasi tekstual ke OID-nya. Jika namanya ada, OID dikembalikan.

Contoh:

SELECT to_regclass('public.actor');

Hasil:

actor

Jika tabel tidak ada, NULL dikembalikan.

Transmisikan ke regclass

Anda juga dapat menggunakan nama tabel untuk mengetik regclass :

SELECT 'public.actor'::regclass

Hasil:

actor

Namun, jika tabel tidak ada, akan terjadi kesalahan.

Periksa apakah Tabel Sudah Ada Sebelum Membuatnya

Jika Anda perlu membuat tabel jika belum ada, Anda dapat menggunakan IF NOT EXISTS klausa dari CREATE TABLE penyataan. Jika tabel tidak ada, itu akan dibuat. Jika sudah ada, tidak akan dibuat.

Lihat Membuat Tabel Hanya jika Tidak Ada di PostgreSQL sebagai contoh.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Batasan NOT NULL pada sekumpulan kolom

  2. Array elemen PostgreSQL yang masing-masing merupakan kunci asing

  3. Pengalihan penyisipan berbasis pemicu Postgres tanpa merusak RETURNING

  4. Bagaimana IsFinite() Bekerja di PostgreSQL

  5. Mengambil Komentar dari DB PostgreSQL