将 SELECT 的结果连接到 EXECUTE
Concatenate result of a SELECT into an EXECUTE
我正在尝试在匿名代码块 (DO $$ ... BEGIN... END$$
) 中使用 EXECUTE 从定义的备份中重新创建视图,但我无法让它工作。这大约是我目前所拥有的:
EXECUTE 'CREATE VIEW image AS (' || (SELECT definition FROM tmp_view_backup WHERE viewname = 'image') || ')';
带有视图定义备份的table是这样制作的
CREATE TABLE tmp_view_backup
AS
(select viewname,definition from pg_views
WHERE schemaname = 'public'
);
似乎是 select 导致我在创建字符串时遇到一些问题,因为结果与我预期的完全不同:
postgres=# select char_length('CREATE VIEW image AS (' || (SELECT definition FROM tmp_view_backup WHERE viewname = 'image') || ')') as f ;
f
---
(1 row)
这是什么?空行?如果我删除 select 我会得到一个正常的答案(比如字符串长度是 23
)。
您可以使用 PSQL \gexec
参数。
SELECT format('CREATE VIEW image AS %s ', definition)
FROM tmp_view_backup
WHERE viewname = 'image';\gexec
或者在 DO 块中
DO $$
BEGIN
EXECUTE format('CREATE VIEW image AS %s ', definition)
FROM tmp_view_backup
WHERE viewname = 'image';
END $$;
我正在尝试在匿名代码块 (DO $$ ... BEGIN... END$$
) 中使用 EXECUTE 从定义的备份中重新创建视图,但我无法让它工作。这大约是我目前所拥有的:
EXECUTE 'CREATE VIEW image AS (' || (SELECT definition FROM tmp_view_backup WHERE viewname = 'image') || ')';
带有视图定义备份的table是这样制作的
CREATE TABLE tmp_view_backup
AS
(select viewname,definition from pg_views
WHERE schemaname = 'public'
);
似乎是 select 导致我在创建字符串时遇到一些问题,因为结果与我预期的完全不同:
postgres=# select char_length('CREATE VIEW image AS (' || (SELECT definition FROM tmp_view_backup WHERE viewname = 'image') || ')') as f ;
f
---
(1 row)
这是什么?空行?如果我删除 select 我会得到一个正常的答案(比如字符串长度是 23
)。
您可以使用 PSQL \gexec
参数。
SELECT format('CREATE VIEW image AS %s ', definition)
FROM tmp_view_backup
WHERE viewname = 'image';\gexec
或者在 DO 块中
DO $$
BEGIN
EXECUTE format('CREATE VIEW image AS %s ', definition)
FROM tmp_view_backup
WHERE viewname = 'image';
END $$;