2014-09-24 32 views
6

的执行输出我有一个匿名DO块的Postgres数据库象下面这样:打印DO匿名块

DO LANGUAGE plpgsql $$ 
DECLARE 
    FUNC_ID smallint; 
BEGIN 
    SELECT COUNT(1) INTO FUNC_ID FROM FUNCTION WHERE NAME = 'addition'; 
    IF FUNC_ID = 0 THEN 
     INSERT INTO FUNCTION (ID, NAME, DESCRIPTION, FUNCTION) 
     values ((select (max(id)+1) from FUNCTION), 'subtraction' 
       , 'calculate', 'catalog'); 
    END IF; 

END; 
$$; 

如果执行这个代码块它给输出仅以DO

如何输出整个代码块到控制台?

+0

定义“输出”。添加一个你希望得到的例子。 – 2014-09-24 18:15:03

回答

7

使用RAISE NOTICE语句

postgres=# DO $$BEGIN RAISE NOTICE 'Hello %', SESSION_USER; END; $$; 
NOTICE: Hello pavel 
DO 

查看更多相关documentation

4

您的代码以多种方式扭曲。改用:

你或许应该有一个serial主键,绘制从SEQUENCE下一个值。你有什么容易出现竞争条件和典型的反模式。

此外,即使Postgres允许使用function作为标识符,我也不会使用它。这是一个reserved word in the SQL standard

CREATE TABLE func 
    func_id serial PRIMARY KEY 
, func text NOT NULL 
, description text 
, find_proper_name text) 
); 

然后你整个声明可以是:

INSERT INTO func(func, description, find_proper_name) 
SELECT 'subtraction', 'calculate', 'catalog' 
WHERE EXISTS (SELECT 1 FROM func WHERE func = 'addition'); 

你不会在这里所有需要DO声明