gpt4 book ai didi

postgresql - postgres中的动态sql查询

转载 作者:行者123 更新时间:2023-11-29 11:09:23 30 4
gpt4 key购买 nike

我试图使用动态 SQL 在 postgres 中运行一些查询。

例子:

EXECUTE format('SELECT * from result_%s_table', quote_ident((select id from ids where condition = some_condition)))

我必须查询一个表,其格式为 result_%s_table,其中,我需要从另一个表中替换正确的表名(一个 ID)。

我收到错误错误:准备好的语句“格式”不存在

链接:string substitution with query result postgresql

最佳答案

EXECUTE ... USING 仅适用于 PL/PgSQL - 即在函数内或 DO blocks用 PL/PgSQL 语言编写。它不适用于纯 SQL;普通 SQL 中的 EXECUTE 完全不同,用于执行准备好的语句。您不能直接在 PostgreSQL 的 SQL 方言中使用动态 SQL。

比较:

参见 my prior answer 中的倒数第二个.


除了不运行 except in PL/PgSQL 你的 SQL 语句是错误的,它不会做你期望的。如果 (select id from ids where condition = some_condition) 返回 say 42,如果 id 是整数,则语句将失败。如果将其转换为文本,您会得到:

EXECUTE format('SELECT * from result_%s_table', quote_ident('42'));
EXECUTE format('SELECT * from result_%s_table', '"42"');
EXECUTE 'SELECT * from result_"42"_table';

那是无效的。您实际上需要 result_42_table"result_42_table"。你必须写一些更像:

EXECUTE format('SELECT * from %s', quote_ident('result_'||(select id from ids where condition = some_condition)||'_table'))

... 如果您必须使用 quote_ident

关于postgresql - postgres中的动态sql查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12780275/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com