PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 10/02/2017 13:53:08

cet horrible $$ dans le create function

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

#2 10/02/2017 14:41:45

ruizsebastien
Membre

Re : cet horrible $$ dans le create function

bonjour,

Avez-vous essayé "d’échapper" les caractères spéciaux ?
du genre : \$\$

Hors ligne

#3 10/02/2017 15:33:34

ioguix
Administrateur

Re : cet horrible $$ dans le create function

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)

Jehan-Guillaume (ioguix) de Rorthais
www.postgresql.org | www.postgresql.fr
www.dalibo.org | www.dalibo.com

Hors ligne

#4 10/02/2017 15:37:51

ioguix
Administrateur

Re : cet horrible $$ dans le create function

Tiens, j'oubliais, vous avez aussi ce format de disponible:

psql "dbname=$database_name options=--search_path=pg_catalog" <<'EOQ'
...
EOQ

Jehan-Guillaume (ioguix) de Rorthais
www.postgresql.org | www.postgresql.fr
www.dalibo.org | www.dalibo.com

Hors ligne

Pied de page des forums