postgresql - 如何将 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
... 所以... at A
,NEW_SCHEMA
被解释为变量,但 atB
和C
, 它被解释为文字,并NEW_SCHEMA
创建了一个名为的新模式。
我怎样才能让 psql 将变量解释为变量,而不是文字。
解决方案
看起来您不能将变量与 DROP SCHEMA 命令一起使用。您必须动态构建一些 SQL。答案似乎在这里给出。重新发明轮子没有意义。:-)
更新:我使用动态 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$$;
推荐阅读
- python - 正则表达式提取斜杠“/”周围的数字
- python - 使用 For 循环的 Django Python 模板嵌套列表
- javascript - 是否可以在日期类型的输入 html 元素中使用日期时间字符串?
- javascript - TypeError:无法读取未定义 React JS 的属性“路径”
- esper - 用于计算 Esper 窗口中所有事件的自定义函数
- javascript - fullcalendar v4 中的事件年视图
- node.js - 如何在 Heroku 上使用我的 Angular 应用程序解决 CORS 问题
- ios - Alamofire 分别获取响应体
- php - 如何更改 url 的外观但保留功能
- html - 为什么整个 html 正文卡在视口顶部?