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

#1 11/07/2016 17:56:31

alain29100
Membre

Niveau débutant sur postgres : connection base dans un script

Bonjour,
Je suis vraiment désolé de faire appel à vous pour  un question aussi basique...  sad=
voici mon besoin : au travers un ordonnanceur je dois lancer un script de purge de tables postgres.
Je suppose que je dois dans mon script d'abord me connecter à la base avec un user et un pwd bien défini avant de lancer ma requête "delete from "table" where "zone" < current_date -60" (je veux purger tous les éléments > à 2 mois.

ma requête pour me connecter :

psql -U "user" -W "passwd" "Nom_Base"

J'ai beau mettre les paramètres dans tous les sens il n'accepte pas ma requête

Merci pour votre aide

Un breton embarrassé    hmm

Hors ligne

#2 11/07/2016 18:07:24

rjuju
Administrateur

Re : Niveau débutant sur postgres : connection base dans un script

Bonjour,

psql n'acceptera pas de fournir le mot de passe en ligne de commande (voir http://docs.postgresql.fr/9.5/app-psql.html ).

Vous pouvez soit définir la variable d'environnement $PGPASSWORD soit utiliser un fichier .pgpass (voir http://docs.postgresql.fr/9.5/libpq-pgpass.html).

Au passage, 60 jours et deux mois ne sont pas équivalent. Si cela peut être problématique pour vous, vous pouvez utiliser quelque chose comme « (now() - interval '2 month')::date » à la place.

Hors ligne

#3 12/07/2016 10:28:23

alain29100
Membre

Re : Niveau débutant sur postgres : connection base dans un script

Merci pour ton retour.
Ca m'a bien aidé

big_smile

Hors ligne

#4 12/07/2016 13:24:40

alain29100
Membre

Re : Niveau débutant sur postgres : connection base dans un script

Nickel pour la connexion par contre pour faire exécuter le fichier sql, pas terrible

ma commande :

C:\Users\ralain>psql -U postgres DBCRM-REC -f c:/wsys/lsystst/tst_sortie_csv.sql

psql : attention : option supplémentaire « -f » ignorée
psql : attention : option supplémentaire « c:/wsys/lsystst/tst_sortie_csv.sql »
ignorée
psql (9.4.5)
Attention : l'encodage console (850) diffère de l'encodage Windows (1252).
            Les caractères 8 bits peuvent ne pas fonctionner correctement.
            Voir la section « Notes aux utilisateurs de Windows » de la page
            référence de psql pour les détails.
Saisissez « help » pour l'aide.

DBCRM-REC=#

Le fichier sql que je veux exécuter :

set colsep ";"
set trimspool on
set heading off
set echo off
set feedback off
set pagesize 0

spool %LSYSWRK%\test_sql_sortie.csv
select * from history where HisUpd < current_date -120;
spool off

Peut-on enchaîner l'exécution du ficher sql  sur la même ligne que la connexion ?

Merci pour votre aide

Alain

Hors ligne

#5 12/07/2016 13:34:05

rjuju
Administrateur

Re : Niveau débutant sur postgres : connection base dans un script

Normalement oui, peut-être est-ce du à une limitation sous windows concernant
l'ordre des arguments. Est-ce que cette commande fonctionne ?

C:\Users\ralain>psql -U postgres -f c:/wsys/lsystst/tst_sortie_csv.sql DBCRM-REC

Hors ligne

#6 13/07/2016 08:45:52

gleu
Administrateur

Re : Niveau débutant sur postgres : connection base dans un script

De souvenir, l'ordre des arguments a une importance sous Windows. Ça devrait corriger ce problème. Par contre, le script SQL... bin, c'est pas du SQL. Jamais ça ne passera avec PostgreSQL.


Guillaume.

Hors ligne

#7 13/07/2016 09:06:42

rjuju
Administrateur

Re : Niveau débutant sur postgres : connection base dans un script

Ah effectivement je n'avais pas regardé. Il s'agit de commandes pour sqlplus qui ne fonctionneront pas. Pour avoir les commandes supportées par psql, vous pouvez consulter la documentation : http://docs.postgresql.fr/9.5/app-psql.html

Hors ligne

#8 18/07/2016 11:00:59

alain29100
Membre

Re : Niveau débutant sur postgres : connection base dans un script

merci pour vos retours... mais je n'y arrive vraiment pas. Plus nul tu meurs.  mad

=======================
le programme  .bat qui est sensé lancer la connection. Il se connecte bien pais n'exécute pas la procédure.


set ECHO=all

set EXPPARM=PGUSER

for /F %%i in ('call wexpparmrtv %EXPPARM%') do set PGUSER=%%i

set EXPPARM=PGPASSWORD
for /F %%i in ('call wexpparmrtv %EXPPARM%') do set PGPASSWORD=%%i



set DATABASE=DBCRM-REC

psql -U %PGUSER% %DATABASE%
\i c:/wsys/lsystst/tst_sortie_csv.sql

exit;
================================
La procédure appelée : tst_sortie_csv.sql



set colsep ";"
set trimspool on
set heading off
set echo off
set feedback off
set pagesize 0

spool %LSYSWRK%\test_sql_sortie.csv
select * from history where HisUpd < current_date -120;
spool off




Voici la log
=========================
C:\wsys\lsystst>test_connect_psq

C:\wsys\lsystst>set ECHO=all

C:\wsys\lsystst>set EXPPARM=PGUSER

C:\wsys\lsystst>for /F %i in ('call wexpparmrtv PGUSER') do set PGUSER=%i

C:\wsys\lsystst>set PGUSER=postgres

C:\wsys\lsystst>set EXPPARM=PGPASSWORD

C:\wsys\lsystst>for /F %i in ('call wexpparmrtv PGPASSWORD') do set PGPASSWORD=%i

C:\wsys\lsystst>set PGPASSWORD=*****
C:\wsys\lsystst>set DATABASE=DBCRM-REC

C:\wsys\lsystst>psql -U postgres DBCRM-REC
psql (9.4.5)
Attention : l'encodage console (850) diffère de l'encodage Windows (1252).
            Les caractères 8 bits peuvent ne pas fonctionner correctement.
            Voir la section « Notes aux utilisateurs de Windows » de la page
            référence de psql pour les détails.
Saisissez « help » pour l'aide.

DBCRM-REC=#

================================

Je patauge   roll

Help !

Merci d'avance

Hors ligne

#9 18/07/2016 11:42:02

rjuju
Administrateur

Re : Niveau débutant sur postgres : connection base dans un script

Comme expliqué dans les messages précédents, les commandes utilisées dans votre fichier .sql ne sont pas valides, regardez la documentation http://docs.postgresql.fr/9.5/app-psql.html pour trouver un équivalent de ce que vous chercher à faire.

Sinon, je vous conseille d'utiliser « psql [...] -f tst_sortie_csv.sql ».

Hors ligne

Pied de page des forums