Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.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
Sql 引发通知以打印表的数据_Sql_Postgresql_Postgresql 9.2 - Fatal编程技术网

Sql 引发通知以打印表的数据

Sql 引发通知以打印表的数据,sql,postgresql,postgresql-9.2,Sql,Postgresql,Postgresql 9.2,我希望能够从sql脚本/函数中打印一些调试信息。当然,我可以这样做 RAISE NOTICE 'hello!' 但我还需要打印整个表的数据。这不起作用: RAISE NOTICE '%' (SELECT * FROM table1) 是否可能以及如何实现?最直接的方法是迭代for循环中的行,并使用包含您感兴趣的每一列的RAISE NOTICE进行插值 i、 e.类似于: FOR items IN SELECT * FROM table1 LOOP RAISE NOTI

我希望能够从sql脚本/函数中打印一些调试信息。当然,我可以这样做

RAISE NOTICE 'hello!'
但我还需要打印整个表的数据。这不起作用:

RAISE NOTICE '%' (SELECT * FROM table1)

是否可能以及如何实现?

最直接的方法是迭代for循环中的行,并使用包含您感兴趣的每一列的RAISE NOTICE进行插值

i、 e.类似于:

    FOR items IN SELECT * FROM table1 LOOP
        RAISE NOTICE 'col1: %s, col2: %s', quote_ident(items.col1), quote_ident(items.col2);
    END LOOP;
其中项声明为记录。

RAISE NOTIONE将不对齐地打印表数据,因此很难读取。更灵活的方法是使用refcursor:

然后在事务中运行函数:

BEGIN;
SELECT my_func();
FETCH ALL FROM "unique_name_of_temp_cursor_1";    --here is double-quotes ""!
ROLLBACK;     --do not save any changes to DB during tests (or use COMMIT;)

在同一事务期间,此类refcursor将可用于读取。如果您不使用BEGIN和ROLLBACK或COMMIT包装测试,PostgreSQL将无法找到此测试。

因为postgres 9.3可以用于将json转换为适合通知的文本

RAISE NOTICE '%', to_json(record1);

行上循环的循环变量必须是一个记录或行变量或标量变量列表,我提到上面的项应该声明为记录。对于整个表,您将需要一些类似于SELECT array_to_jsonarray_aggt FROM t的内容。我试过了,我得到了一个错误:错误:语法错误在或接近于_jsonpg 9.3是必需的。您缺少一个逗号,这应该是引起注意的“%”,到_jsonrecord1;
RAISE NOTICE '%', to_json(record1);