如何执行存储在表列PostgreSql中的查询?
我有一个包含以下文本数据的表列:如何执行存储在表列PostgreSql中的查询?,sql,postgresql,Sql,Postgresql,我有一个包含以下文本数据的表列: "drop table log_history_2_2015" "drop table log_history_3_2015" "drop table log_history_4_2015" "drop table log_history_5_2015" "drop table log_history_6_2015" 如何在不循环所有这些行并单独执行它们的情况下单次执行它们。使用选择string_agg(COLUMN_NAME,“;”)| chr(10)-它将
"drop table log_history_2_2015"
"drop table log_history_3_2015"
"drop table log_history_4_2015"
"drop table log_history_5_2015"
"drop table log_history_6_2015"
如何在不循环所有这些行并单独执行它们的情况下单次执行它们。使用
选择string_agg(COLUMN_NAME,“;”)| chr(10)
-它将为您提供单行运行更通用的解决方案是使用DO
块来执行动态SQL:
DO
LANGUAGE plpgsql
$$
DECLARE
stmt text;
BEGIN
FOR stmt IN
SELECT statement FROM the_table
LOOP
EXECUTE stmt;
END LOOP;
END;
$$;
请注意,这在一个事务中运行。Thanx表示答案。
| | chr(10)
在查询中有什么用?| | chr(10)
将单行制动到miltiples-在分号后添加十个ASCCI字符好的,Thanx表示您的help@Code-和尚不用担心。我的荣幸chr(10)
是ASCII换行。您也可以在PostgreSQL中将其写成E'\r'
。这段代码在整个语句系列的末尾追加一行提要。如果要在每个分号后面加一个分号,则需要在函数调用中移动| | chr(10)
。我将把分隔符写成E'\r'
或只是包含一个文本换行符。code-Monk没有循环,所以Do
块对于execute
@VaoTsun将是同一行,我认为这是为了避免客户端循环。在PL/PgSQL的循环中执行它们与在多语句中执行它们之间没有什么有意义的区别。PostgreSQL后端只是在语句上循环,就像您在PL/PgSQL中那样,如果您发送一个多语句。我们可以在红移中使用它吗?我直到今天才能够运行它now@GarouDan几乎可以肯定不是。红移基于超古老的PostgreSQL-8.2 IIRC。