在不创建函数的情况下使用 PL/pgSQL 条件
Using PL/pgSQL conditionals without creating a function
我想创建一个 Postgres table 并更改它,但前提是它首先不存在。我不认为这应该是一个函数,因为这 运行 在应用程序启动期间只有一次。我尝试使用 client.none(sql, params)
从 pg-promise nodejs lib 执行此代码,但它给了我一个错误 syntax error at or near "IF"
,所以我猜它必须是其他执行方法,或者我的 SQL 从根本上来说是有缺陷的。谢谢!
BEGIN
IF NOT EXISTS (
SELECT 1 FROM information_schema.tables
WHERE table_schema = AND table_name =
) THEN
CREATE TABLE ~ (zoom smallint, idx bigint, tile bytea, PRIMARY KEY (zoom, idx));
ALTER TABLE ~ ALTER COLUMN tile SET STORAGE EXTERNAL;
END IF;
END;
您的代码就快完成了
do $$
BEGIN
IF NOT EXISTS (
SELECT 1 FROM information_schema.tables
WHERE table_schema = AND table_name =
) THEN
CREATE TABLE ~ (zoom smallint, idx bigint, tile bytea, PRIMARY KEY (zoom, idx));
ALTER TABLE ~ ALTER COLUMN tile SET STORAGE EXTERNAL;
END IF;
END $$;
我想创建一个 Postgres table 并更改它,但前提是它首先不存在。我不认为这应该是一个函数,因为这 运行 在应用程序启动期间只有一次。我尝试使用 client.none(sql, params)
从 pg-promise nodejs lib 执行此代码,但它给了我一个错误 syntax error at or near "IF"
,所以我猜它必须是其他执行方法,或者我的 SQL 从根本上来说是有缺陷的。谢谢!
BEGIN
IF NOT EXISTS (
SELECT 1 FROM information_schema.tables
WHERE table_schema = AND table_name =
) THEN
CREATE TABLE ~ (zoom smallint, idx bigint, tile bytea, PRIMARY KEY (zoom, idx));
ALTER TABLE ~ ALTER COLUMN tile SET STORAGE EXTERNAL;
END IF;
END;
您的代码就快完成了
do $$
BEGIN
IF NOT EXISTS (
SELECT 1 FROM information_schema.tables
WHERE table_schema = AND table_name =
) THEN
CREATE TABLE ~ (zoom smallint, idx bigint, tile bytea, PRIMARY KEY (zoom, idx));
ALTER TABLE ~ ALTER COLUMN tile SET STORAGE EXTERNAL;
END IF;
END $$;