Impresión a pantalla adentro.archivos sql postgres


Esto suena como que debería ser una cosa muy fácil de hacer, sin embargo, no puedo encontrar en NINGÚN LUGAR cómo hacerlo.

Tengo un .archivo sql que estoy construyendo para una actualización a mi aplicación que altera tablas, inserciones / actualizaciones, etc.

Quiero escribir en la pantalla después de que termine cada comando.

Así que, por ejemplo, si tengo algo como:

insert into X...

Quiero ver algo como

Empezando por insertar en el cuadro X

Finished inserting into table X

¿Es esto posible en Postgres?

Author: El Guapo, 2013-06-29

3 answers

Si solo está alimentando una gran pila de SQL para psql entonces tienes un par de opciones.

Podrías ejecutar psql con --echo-all:

-a
--echo-all
Imprima todas las líneas de entrada a la salida estándar como son leídos. Esto es más útil para el procesamiento de scripts que interactivo modo. Esto equivale a establecer la variable ECHO en all.

Eso y las otras opciones "echo todo de este tipo" (ver el manual) son probablemente demasiado ruidoso. Si solo quieres imprimir cosas manualmente, usa \echo:

\echo text [ ... ]
Imprime los argumentos en la salida estándar, separados por un espacio y seguidos de una nueva línea. Esto puede ser útil para intercalar información en la salida de scripts.

Así que puedes decir: {[14]]}

\echo 'Starting to insert into table X'
-- big pile of inserts go here...
\echo 'Finished inserting into table X'
 33
Author: mu is too short,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-06-29 18:03:33

Vía: https://stackoverflow.com/a/18828523/2014857

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

Dependiendo de lo que estés haciendo, me preocuparía hacer un montón de bloques de código anónimos. Podría considerar almacenar lo anterior como una función y pasar cualquier valor que desee registrar.

 5
Author: FuriousFolder,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:25:57

Probablemente hay una mejor manera de hacerlo. Pero si necesitas usar vanilla SQL, prueba esto:

SELECT NULL AS "Starting to insert into table X";
-- big pile of inserts go here...
SELECT NULL AS "Finished inserting into table X";
 3
Author: shanemgrey,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-11-19 17:49:14