Fitur ini telah diterapkan di Postgres 9.1 :
CREATE TABLE IF NOT EXISTS myschema.mytable (i integer);
Untuk versi lama , berikut adalah fungsi untuk mengatasinya:
CREATE OR REPLACE FUNCTION create_mytable()
RETURNS void
LANGUAGE plpgsql AS
$func$
BEGIN
IF EXISTS (SELECT FROM pg_catalog.pg_tables
WHERE schemaname = 'myschema'
AND tablename = 'mytable') THEN
RAISE NOTICE 'Table myschema.mytable already exists.';
ELSE
CREATE TABLE myschema.mytable (i integer);
END IF;
END
$func$;
Telepon:
SELECT create_mytable(); -- call as many times as you want.
Catatan:
-
Kolom
schemaname
dantablename
dipg_tables
peka huruf besar/kecil. Jika Anda mengutip dua kali pengidentifikasi diCREATE TABLE
pernyataan, Anda harus menggunakan ejaan yang sama persis. Jika tidak, Anda perlu menggunakan string huruf kecil. Lihat: -
Apakah nama kolom PostgreSQL peka huruf besar/kecil?
-
pg_tables
hanya berisi tabel actual yang sebenarnya . Pengidentifikasi mungkin masih ditempati oleh objek terkait. Lihat: -
Cara memeriksa apakah ada tabel dalam skema tertentu
-
Jika peran melaksanakan fungsi ini tidak memiliki hak istimewa yang diperlukan untuk membuat tabel yang mungkin ingin Anda gunakan
SECURITY DEFINER
untuk fungsi dan menjadikannya milik oleh peran lain dengan hak istimewa yang diperlukan. Versi ini cukup aman.