2016-10-06 132 views
2

我想创建一个Postgres表并对其进行修改,但前提是它不存在。我不认为这应该是一个功能,因为这应用程序启动过程中只运行一次。我试图使用client.none(sql, params)来执行pg-promise nodejs lib这段代码,但它给了我一个错误syntax error at or near "IF",所以我猜它必须是其他执行方法,否则我的SQL有根本的缺陷。谢谢!在不创建函数的情况下使用PL/pgSQL条件

BEGIN 
IF NOT EXISTS (
    SELECT 1 FROM information_schema.tables 
    WHERE table_schema = $1 AND table_name = $2 
) THEN 
    CREATE TABLE $2~ (zoom smallint, idx bigint, tile bytea, PRIMARY KEY (zoom, idx)); 
    ALTER TABLE $2~ ALTER COLUMN tile SET STORAGE EXTERNAL; 
END IF; 
END; 
+4

[匿名代码块(https://www.postgresql.org/docs/9.6/static/sql-do.html) – Abelisto

+0

@Abelisto,这正是我所寻找的,谢谢!你能做出答案,我会解决它吗? – Yurik

回答

2

您的代码是几乎没有

do $$ 
BEGIN 
IF NOT EXISTS (
SELECT 1 FROM information_schema.tables 
WHERE table_schema = $1 AND table_name = $2 
) THEN 
CREATE TABLE $2~ (zoom smallint, idx bigint, tile bytea, PRIMARY KEY (zoom, idx)); 
ALTER TABLE $2~ ALTER COLUMN tile SET STORAGE EXTERNAL; 
END IF; 
END $$; 
相关问题