Vous n'êtes pas identifié(e).
Pages : 1
Bonjour,
Je veux mettre un create function dans un script bash (un désir naturel et légitime, me semble-t-il) :
if [ $# -ne 2 ]
then
echo "usage : $0 database_name schema_name"
exit
fi
database_name=$1
schema_name=$2
psql -qAt $database_name <<EOF
set search_path to $schema_name;
---------------------------------------------------------------------------------------------------------------------------------------------
-- create db objects
---------------------------------------------------------------------------------------------------------------------------------------------
drop table if exists audit_history;
create table audit_history (
...
---------------------------------------------------------------------------------------------------------------------------------------------
-- generic function for all triggers
---------------------------------------------------------------------------------------------------------------------------------------------
create or replace function populate_audit_history() returns trigger as $$
begin
...
Mais bien sûr, bash interprét $$ comme étant le pid.
Et si j'écris
psql -qAt $database_name <<'EOF'
alors là, c'est
set search_path to $schema_name;
qui ne marche plus.
Quel flip !
Que faire ?
Merci pour votre attention
Hors ligne
bonjour,
Avez-vous essayé "d’échapper" les caractères spéciaux ?
du genre : \$\$
Cordialement,
Sébastien.
Hors ligne
Bonjour,
Vous pouvez aussi initialiser le search_path directement à la connexion. Eg.:
$ psql <<'EOQ'
SELECT current_setting($$search_path$$);
EOQ
current_setting
-----------------
"$user",public
(1 row)
$ PGOPTIONS="--search_path=pg_catalog" psql <<'EOQ'
SELECT current_setting($$search_path$$);
EOQ
current_setting
-----------------
pg_catalog
(1 row)
Hors ligne
Tiens, j'oubliais, vous avez aussi ce format de disponible:
psql "dbname=$database_name options=--search_path=pg_catalog" <<'EOQ'
...
EOQ
Hors ligne
Pages : 1