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?
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 variableECHO
enall
.
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'
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.
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";
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