我对在postgres中使用变量感到非常困惑。 在psql命令行中,我执行了:
DO $$
DECLARE
NEW_SCHEMA TEXT:= 'myschema';
BEGIN
RAISE NOTICE 'Value of NEW_SCHEMA: %', NEW_SCHEMA; -- A
DROP SCHEMA IF EXISTS NEW_SCHEMA; -- B
CREATE SCHEMA IF NOT EXISTS NEW_SCHEMA; -- C
END$$;
给我:
NOTICE: Value of NEW_SCHEMA: myschema
NOTICE: schema "new_schema" does not exist, skipping
DO
...所以,在A
,NEW_SCHEMA
被解释为变量,但是在B
和C
,它被解释为文字,并且创建了一个名为NEW_SCHEMA
的新架构。
如何使psql将变量解释为变量,而不是文字。
答案 0 :(得分:1)
您似乎无法在DROP SCHEMA命令中使用变量。您必须动态构建一些SQL。答案似乎在这里给出。重塑轮子毫无意义。 :-)
Drop a schema using variable name
更新:我使用动态SQL尝试了以下方法,并且可以正常工作。我的结论是CREATE / DROP SCHEMA不允许变量。我注释掉了原始行以显示动态替换。
do $$
DECLARE
NEW_SCHEMA TEXT:= 'myschema';
-- SQL TEXT := '';
BEGIN
RAISE NOTICE 'Value of NEW_SCHEMA: %', NEW_SCHEMA; -- A
-- DROP SCHEMA IF EXISTS NEW_SCHEMA; -- B
-- CREATE SCHEMA IF NOT EXISTS NEW_SCHEMA; -- C
EXECUTE 'DROP SCHEMA IF EXISTS ' || NEW_SCHEMA;
EXECUTE 'CREATE SCHEMA IF NOT EXISTS ' || NEW_SCHEMA;
END$$;