2014-09-24 6 views
6

Ho un DO blocco anonimo in un database Postgres come di seguito:stampare l'output di esecuzione di DO blocco anonimo

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; 
$$; 

Se eseguire questo blocco di codice dà uscita come solo DO.

Come eseguire l'output dell'intero blocco di codice su console?

+0

Definire "l'output". Aggiungi un esempio di ciò che desideri ottenere. –

risposta

7

utilizzare un'istruzione RAISE AVVISO

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

Vedi più correlato documentation.

4

Il codice è intrecciato in più modi. Utilizzare invece:

Probabilmente dovrebbe avere una chiave primaria serial, disegnando il prossimo valore da un SEQUENCE. Quello che hai è soggetto a condizioni di gara e un tipico anti-pattern.

Inoltre, non utilizzerei lo function come identificatore anche se consentito in Postgres. È un reserved word in the SQL standard.

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

Allora la vostra intera istruzione può essere:

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

Non hai bisogno di una dichiarazione DOaffatto qui.