Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何执行存储在表列PostgreSql中的查询?_Sql_Postgresql - Fatal编程技术网

如何执行存储在表列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。