banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Rencontres QGIS 2025

L'appel à participation est ouvert jusqu'au 19 janvier 2025!

#1 Wed 30 May 2018 17:39

Romary
Participant assidu
Lieu: Epinal
Date d'inscription: 17 Jun 2011
Messages: 211

[PostgreSQL] delete selon champ date

Bonjour,
Je cherche à supprimer des lignes d'une table selon un champ date de cette même table. Lorsque la date dépasse les 2 mois par rapport à la date actuelle, je souhaite supprimer les lignes. Sachant que c'est une requête qui doit être exécutée tous les jours, je ne sais pas comment m'y prendre?

Cordialement,
Ry

Hors ligne

 

#2 Wed 30 May 2018 18:19

tumasgiu
Membre
Lieu: Ajaccio
Date d'inscription: 5 Jul 2010
Messages: 1160

Re: [PostgreSQL] delete selon champ date

Code:

DELETE FROM ma_table
WHERE ma_date < now() - INTERVAL '2 MONTH'
;

Attention aux fuseaux horaires !

Pour plus d'infos :
https://docs.postgresql.fr/10/functions-datetime.html

Hors ligne

 

#3 Wed 30 May 2018 21:58

Romary
Participant assidu
Lieu: Epinal
Date d'inscription: 17 Jun 2011
Messages: 211

Re: [PostgreSQL] delete selon champ date

Merci pour la requête mais là où je m'interroge c'est comment faire pour qu'elle s'exécute régulièrement, tous les jours par exemple??

Hors ligne

 

#4 Thu 31 May 2018 09:23

tumasgiu
Membre
Lieu: Ajaccio
Date d'inscription: 5 Jul 2010
Messages: 1160

Re: [PostgreSQL] delete selon champ date

Si votre serveur tourne sous linux,
vous pouvez bricoler une tâche avec cron,
ou utiliser l'extension pg_cron.
https://github.com/citusdata/pg_cron

Si l'environnement est Windows, il y a pgAgent,
mais je ne sais pas si le projet est toujours maintenu.
Il me semble qu'on peut l'installer avec stackbuilder,
si on utilise la version EntrepriseDB de Postgres.
Avec la version BigSQL, vous pouvez utiliser
l'utilitaire en ligne de commande pgc pour l'installer :

Code:

pgc install pgagent

Dernière modification par tumasgiu (Thu 31 May 2018 09:30)

Hors ligne

 

#5 Thu 31 May 2018 09:25

Yves
Membre du bureau
Lieu: Aix-les-Bains
Date d'inscription: 22 Mar 2006
Messages: 9869
Site web

Re: [PostgreSQL] delete selon champ date

Bonjour,

La commande crontab sous linux :

Code:

*/10   *   *   *   *  postgres psql -d <maDB> -f "DELETE FROM ma_table WHERE ma_date < now() - INTERVAL '2 MONTH';"

Y.


Yves Jacolin, bénévole de l'association GeoRezo.net, agit au nom et pour le compte de l'association - Partageons ce qui nous départage !!  - GeoRezo vous aide ? Aidez GeoRezo !

Hors ligne

 

#6 Thu 31 May 2018 09:26

Yves
Membre du bureau
Lieu: Aix-les-Bains
Date d'inscription: 22 Mar 2006
Messages: 9869
Site web

Re: [PostgreSQL] delete selon champ date

tumasgiu a écrit:

Code:

DELETE FROM ma_table
WHERE ma_date < now() - INTERVAL '2 MONTH'
;

Attention aux fuseaux horaires !

Pour plus d'infos :
https://docs.postgresql.fr/10/functions-datetime.html


J'espère que le champ est créé avec TIMEZONE wink Sinon c'est un peu comme créer un champ géométrique sans SRID ! Bonjour les problèmes.

Y.


Yves Jacolin, bénévole de l'association GeoRezo.net, agit au nom et pour le compte de l'association - Partageons ce qui nous départage !!  - GeoRezo vous aide ? Aidez GeoRezo !

Hors ligne

 

#7 Thu 31 May 2018 09:34

tumasgiu
Membre
Lieu: Ajaccio
Date d'inscription: 5 Jul 2010
Messages: 1160

Re: [PostgreSQL] delete selon champ date

Oui la gestion du temps c'est toujours un casse-tête,
en général dans l'informatique.

Hors ligne

 

#8 Fri 01 June 2018 15:49

Romary
Participant assidu
Lieu: Epinal
Date d'inscription: 17 Jun 2011
Messages: 211

Re: [PostgreSQL] delete selon champ date

Merci pour vos réponses. Je pensais pouvoir faire ça dans postgresql mais je vais devoir faire une tâche planifiée windows.
Je n'ai pas la maîtrise de l'infrastructure...malheureusement.

Ry

Hors ligne

 

#9 Fri 01 June 2018 17:39

jmarsac
Participant assidu
Lieu: NICE
Date d'inscription: 26 Oct 2005
Messages: 572
Site web

Re: [PostgreSQL] delete selon champ date

Romary a écrit:

Merci pour vos réponses. Je pensais pouvoir faire ça dans postgresql mais je vais devoir faire une tâche planifiée windows.
Je n'ai pas la maîtrise de l'infrastructure...malheureusement.

Ry


Ce qui n'empêche nullement de le faire dans PostgreSQL (en utilisant psql)


Jean-Marie
Azimut

Hors ligne

 

#10 Wed 06 June 2018 13:26

Romary
Participant assidu
Lieu: Epinal
Date d'inscription: 17 Jun 2011
Messages: 211

Re: [PostgreSQL] delete selon champ date

Voilà je suis arrivé à faire ce que je voulais.
J'ai fait un script powershell mis en tâche planifié.
Powershell permet d'écrire mes requêtes sql sans me soucier de l'encodage (pratique pour les "<", les "()" utilisé dans la requête. Il permet aussi de travailler en utilisant ODBC donc pas de psql et donc encore une fois plus de problème d'encodage lié à psql.
Merci pour votre aide.
Ry

Hors ligne

 

#11 Wed 06 June 2018 21:19

jmarsac
Participant assidu
Lieu: NICE
Date d'inscription: 26 Oct 2005
Messages: 572
Site web

Re: [PostgreSQL] delete selon champ date

Bonsoir,

Pour régler le problème de page de codes vous pouvez utiliser utiliser chcp dans la fenêtre de commande avant de lancer psql.

Page de codes  défaut :

Code:

C:\psql>chcp
Page de codes active : 850

C:\psql>psql -h serveur -p 5432 -U postgres
Password for user postgres:
psql (10beta4, server 10.4 (Debian 10.4-2.pgdg90+1))
WARNING: Console code page (850) differs from Windows code page (1252)
         8-bit characters might not work correctly. See psql reference
         page "Notes for Windows users" for details.
SSL connection (protocol: TLSv1, cipher: ECDHE-RSA-AES256-SHA, bits: 256, compression: off)
Type "help" for help.

postgres=# \q

en adaptant la page de codes :

Code:

C:\psql>chcp 1252
Page de codes active : 1252

C:\psql>psql -h serveur -p 5432 -U postgres
Password for user postgres:
psql (10beta4, server 10.4 (Debian 10.4-2.pgdg90+1))
SSL connection (protocol: TLSv1, cipher: ECDHE-RSA-AES256-SHA, bits: 256, compression: off)
Type "help" for help.

postgres=#\q

Jean-Marie
Azimut

Hors ligne

 

#12 Thu 07 June 2018 08:22

Romary
Participant assidu
Lieu: Epinal
Date d'inscription: 17 Jun 2011
Messages: 211

Re: [PostgreSQL] delete selon champ date

jmarsac a écrit:

Bonsoir,
Pour régler le problème de page de codes vous pouvez utiliser utiliser chcp dans la fenêtre de commande avant de lancer psql.


Bonjour,
C'est ce que j'ai fait mais j'avais néanmoins quelques soucis d'écriture.
Ry

Hors ligne

 

#13 Thu 07 June 2018 11:00

jmarsac
Participant assidu
Lieu: NICE
Date d'inscription: 26 Oct 2005
Messages: 572
Site web

Re: [PostgreSQL] delete selon champ date

Si vous avez le temps de le préciser, ce serait intéressant d'en connaitre le détail


Jean-Marie
Azimut

Hors ligne

 

#14 Thu 07 June 2018 11:31

Romary
Participant assidu
Lieu: Epinal
Date d'inscription: 17 Jun 2011
Messages: 211

Re: [PostgreSQL] delete selon champ date

jmarsac a écrit:

Si vous avez le temps de le préciser, ce serait intéressant d'en connaitre le détail


Vous voulez le détail du script qui pose problème en batch ou celui qui fonctionne en powershell?

Hors ligne

 

#15 Thu 07 June 2018 12:45

Yves
Membre du bureau
Lieu: Aix-les-Bains
Date d'inscription: 22 Mar 2006
Messages: 9869
Site web

Re: [PostgreSQL] delete selon champ date

Bonjour,

Celui qui fonctionne aidera plus wink

Merci,

Y.


Yves Jacolin, bénévole de l'association GeoRezo.net, agit au nom et pour le compte de l'association - Partageons ce qui nous départage !!  - GeoRezo vous aide ? Aidez GeoRezo !

Hors ligne

 

#16 Thu 07 June 2018 15:41

jmarsac
Participant assidu
Lieu: NICE
Date d'inscription: 26 Oct 2005
Messages: 572
Site web

Re: [PostgreSQL] delete selon champ date

Yves a écrit:

Bonjour,

Celui qui fonctionne aidera plus wink

Merci,

Y.


Oui (pour la solution immédiate) et non (pour l'analyse, il serait intéressant de voir le script qui ne fonctionne pas et les erreurs qu'il génère). smile


Jean-Marie
Azimut

Hors ligne

 

Pied de page des forums

Powered by FluxBB