在MysqL脚本中,您可以写:
CREATE TABLE IF NOT EXISTS foo ...;
… 其他的东西 …
然后可以运行脚本多次而不重新创建表。
你如何在Postgresql中做到这一点?
此功能已于
implemented in Postgres 9.1:
CREATE TABLE IF NOT EXISTS myschema.mytable (i integer);
CREATE OR REPLACE FUNCTION create_mytable () RETURNS void AS $func$ BEGIN IF EXISTS (SELECT 1 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$ LANGUAGE plpgsql;
呼叫:
SELECT create_mytable(); -- call as many times as you want.
如果用户没有创建表所需的特权,您可能想使用SECURITY DEFINER
.此版本足够安全。