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
schemanamedantablenamedipg_tablespeka huruf besar/kecil. Jika Anda mengutip dua kali pengidentifikasi diCREATE TABLEpernyataan, 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_tableshanya 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 DEFINERuntuk fungsi dan menjadikannya milik oleh peran lain dengan hak istimewa yang diperlukan. Versi ini cukup aman.