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.