web-dev-qa-db-fra.com

Impression sur écran en postgres de fichier .sql

Cela semble être une chose très facile à faire, mais je ne trouve nulle part où le faire.

J'ai un fichier .sql que je crée pour une mise à niveau de mon application qui modifie les tables, les insertions/mises à jour, etc.

Je veux écrire sur l'écran après la fin de chaque commande.

Donc, par exemple, si j'ai quelque chose comme:

insert into X...

Je veux voir quelque chose comme,

Commencer à insérer dans le tableau X

insertion terminée dans le tableau X

Est-ce possible à Postgres?

30
El Guapo

Si vous alimentez simplement un gros tas de SQL vers psql alors vous avez quelques options.

Vous pouvez exécuter psql avec --echo-all:

-a
--echo-all
Imprimez toutes les lignes d'entrée sur la sortie standard au fur et à mesure de leur lecture. Ceci est plus utile pour le traitement de script qu'en mode interactif. Cela revient à définir la variable ECHO sur all.

Cela et les autres options "tout faire écho de ce type" (voir le manuel ) sont probablement trop bruyants. Si vous souhaitez simplement imprimer les choses manuellement, utilisez \echo:

\echotext [...]
Imprime les arguments dans la sortie standard, séparés par un espace et suivis d'une nouvelle ligne. Cela peut être utile pour intercaler des informations dans la sortie des scripts.

Vous pouvez donc dire:

\echo 'Starting to insert into table X'
-- big pile of inserts go here...
\echo 'Finished inserting into table X'
44
mu is too short

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

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

Selon ce que vous faites, je serais inquiet de faire un tas de blocs de code anonymes. Vous pouvez envisager de stocker ce qui précède en tant que fonction et de transmettre la valeur que vous souhaitez enregistrer.

6
FuriousFolder

Il y a probablement une meilleure façon de procéder. Mais si vous devez utiliser Vanilla SQL, essayez ceci:

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