如何将postgres变量引用为变量,而不是文字



我对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

所以…在ANEW_SCHEMA被解释为变量,但在BC,它被解释为文字,并创建了一个名为NEW_SCHEMA的新模式。

如何让psql将变量解释为变量,而不是文字。

看起来不能将变量与DROP SCHEMA命令一起使用。您必须动态地构造一些SQL。答案似乎就在这里。重新发明轮子毫无意义。:-(

使用变量名删除架构

更新:我使用DynamicSQL尝试了以下操作,它很有效。我的结论是CREATE/DDROP 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$$;

最新更新