Je dispose d'un fichier sql avec quelques lignes qui ressemblent à ceci:Comment intégrer commande shell plusieurs lignes dans le fichier psql
\set buf `cat example-message.msg | base4 -w0`
SELECT * FROM run_select(:'buf');
Cependant, cela cache le contenu de example-message.msg
et rend mon dossier (ce qui est en fait une liste de cas de test) moins lisible que je le voudrais. Idéalement, je serais en mesure de mettre en ligne le contenu de example-message.msg
. Mais c'est un gros fichier multi-lignes.
J'ai essayé d'utiliser ici-docs:
\set buf `cat <<EOF | base64 -w0
plan { }
EOF
`
Cependant, ici psql se plaint d'une chaîne entre guillemets et non terminée rétrospectivement the docs disent qu'il ne fonctionnera pas de toute façon. (But in any case, the arguments of a meta-command cannot continue beyond the end of the line.
)
Ensuite, je considérais la construction d'une certaine façon la chaîne qui est exécutée:
SELECT $$
plan: {}
$$ AS rawbuf \gset
\set buf `echo :rawbuf | base64 -w0`
Cela ne fonctionne pas non plus, pour des raisons évidentes. Mais je ne peux pas sembler en avoir une variation pour travailler non plus. Je suppose que psql doesn't do variable substitution à l'envers.
Y at-il une autre méthode qui me manque?
Merci pour la réponse! Alors que vous avez résolu la question comme posée, la commande actuelle que je cours a un pipeline plus long que base64. Je pense que vous avez raison de dire que c'est la seule réponse, j'ai fini par écrire une fonction C qui me permet d'intégrer des chaînes supprimées par $$ comme vous l'avez suggéré. – num1