Tính năng này đã được triển khai trong Postgres 9.1 :
CREATE TABLE IF NOT EXISTS myschema.mytable (i integer);
Đối với phiên bản cũ hơn , đây là một hàm để làm việc xung quanh nó:
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$;
Gọi:
SELECT create_mytable(); -- call as many times as you want.
Ghi chú:
-
Các cột
schemaname
vàtablename
trongpg_tables
là trường hợp nhạy cảm. Nếu bạn trích dẫn kép số nhận dạng trongCREATE TABLE
tuyên bố, bạn cần phải sử dụng cùng một chính tả. Nếu không, bạn cần sử dụng các chuỗi chữ thường. Xem: -
Tên cột PostgreSQL có phân biệt chữ hoa chữ thường không?
-
pg_tables
chỉ chứa bảng thực tế . Mã định danh vẫn có thể bị chiếm bởi các đối tượng liên quan. Xem: -
Cách kiểm tra xem một bảng có tồn tại trong một lược đồ nhất định hay không
-
Nếu vai trò đang thực thi hàm này không có các đặc quyền cần thiết để tạo bảng mà bạn có thể muốn sử dụng
SECURITY DEFINER
cho chức năng và làm cho nó được sở hữu bằng một vai trò khác với các đặc quyền cần thiết. Phiên bản này đủ an toàn.