2013-06-29 11 views
23

Sembra che dovrebbe essere una cosa molto semplice da fare, tuttavia, non riesco a trovare OVUNQUE come farlo.Stampa sullo schermo in file .sql postgres

Ho un file sql sto costruendo per un aggiornamento alla mia richiesta che altera tavoli, inserti/aggiornamenti, ecc

voglio scrivere per lo schermo dopo ogni finiture di comando.

Così, per esempio, se ho qualcosa di simile:

insert into X... 

Voglio vedere qualcosa di simile,

A partire da inserire nella tabella di X

Finito l'inserimento in tavolo X

È possibile in Postgres?

+2

Per l'esecuzione da psql, è possibile aggiungere '\ echo Iniziare ad inserire nella tabella X', eccetera, nello script. – wildplasser

+0

Possibile duplicato di [Come elevare un AVVISO in PostgreSQL?] (Http://stackoverflow.com/questions/18828127/how-to-raise-a-notice-in-postgresql) – FuriousFolder

risposta

28

Se si sta solo fornendo una grande quantità di SQL a psql, si dispone di un paio di opzioni.

È possibile eseguire psql con --echo-all:

-a
--echo-all
stampa tutte le linee di ingresso e uscita di serie in quanto vengono letti. Questo è più utile per l'elaborazione degli script rispetto alla modalità interattiva . È equivalente all'impostazione della variabile ECHO su all.

Questo, e le altre opzioni "Echo tutto di questo tipo" (vedi the manual) sono probabilmente troppo rumoroso però. Se si desidera solo per stampare le cose manualmente, utilizzare \echo:

\echotext [...]
Stampa gli argomenti sullo standard output, separati da uno spazio e seguito da un ritorno a capo. Questo può essere utile per interspondere le informazioni nell'output degli script.

modo da poter dire:

\echo 'Starting to insert into table X' 
-- big pile of inserts go here... 
\echo 'Finished inserting into table X' 
+1

HAHAHAHA ... Ho visto "\ echo "ma ho sbagliato! –

3

C'è probabilmente un modo migliore per farlo. Ma se è necessario utilizzare SQL vaniglia, provate questo:

SELECT NULL AS "Starting to insert into table X"; 
-- big pile of inserts go here... 
SELECT NULL AS "Finished inserting into table X"; 
5

Via: https://stackoverflow.com/a/18828523/2014857

DO language plpgsql $$ 
BEGIN 
    RAISE NOTICE 'hello, world!'; 
END 
$$; 

A seconda di quello che stai facendo, sarei preoccupato di fare un mucchio di blocchi di codice anonimi . Potresti considerare la memorizzazione di quanto sopra come una funzione e il passaggio del valore che vuoi registrare.

Problemi correlati