Sql 引发通知以打印表的数据
我希望能够从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
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);