Pages: 1
- Sujet précédent - [PostGreSQL] [PSQL] Format date (TimeStamps) dans un import via COPY - Sujet suivant
#1 Fri 01 May 2020 19:46
- Sylvain M.
- Participant assidu
- Lieu: Saint-Pierre-des-Nids (53)
- Date d'inscription: 8 Sep 2005
- Messages: 995
[PostGreSQL] [PSQL] Format date (TimeStamps) dans un import via COPY
Bonjour à tous,
J'importe dans une table PostGre, via PSQL, des données issues d'un fichier texte, tabulé.
Il y a une colonne au format date, sous cette forme "AAAA:MM:JJ HH:mm:ss" (ex. : 2020:04:10 21:13:26).
Pour l'instant, je n'ai pas trouvé mieux que de les importer en format texte.
Je créé d'abord ma table :
Code:
psql -h localhost -U postgres -d phototheque -c "CREATE TABLE photos.photos_total (Directory text, filename text, DateTimeOriginal text, model text, GPSLatitude numeric, GPSLongitude numeric);"
Ensuite, j'importe les données avec :
Code:
psql -h localhost -U postgres -d phototheque -c "COPY photos.dbphotos FROM 'M:\Photos\dbphotos.txt' NULL '-' ENCODING 'UTF-8';"
(le fichier texte n'a pas d'entête)
Pensez-vous qu'il soit possible d'importer directement les données au format Time Stamps ?
Sylvain M.
Hors ligne
#2 Fri 01 May 2020 20:23
- Sylvain M.
- Participant assidu
- Lieu: Saint-Pierre-des-Nids (53)
- Date d'inscription: 8 Sep 2005
- Messages: 995
Re: [PostGreSQL] [PSQL] Format date (TimeStamps) dans un import via COPY
Je n'ai pas précisé, mais voici comment je convertie ensuite le champ en timestamp :
Code:
to_timestamp(datetimeoriginal,'YYYY:MM:DD HH24:MI') as monchampdate
Dernière modification par Sylvain M. (Fri 01 May 2020 23:07)
Sylvain M.
Hors ligne
#3 Sat 02 May 2020 14:59
- Nicolas Ribot
- Membre
- Lieu: Toulouse
- Date d'inscription: 9 Sep 2005
- Messages: 1554
Re: [PostGreSQL] [PSQL] Format date (TimeStamps) dans un import via COPY
Bonjour,
Avec un trigger sur la table, qui convertit le text en timestamp avec la formule.
Nicolas
Hors ligne
#4 Sat 02 May 2020 15:54
- Sylvain M.
- Participant assidu
- Lieu: Saint-Pierre-des-Nids (53)
- Date d'inscription: 8 Sep 2005
- Messages: 995
Re: [PostGreSQL] [PSQL] Format date (TimeStamps) dans un import via COPY
Bonjour Nicolas, et merci de te pencher sur mon cas.
Finalement, je me suis rendu compte que les données sources n'étaient pas homogènes au niveau du formatage de la date.
Elles sont issues de l'excellent programme ExifTool, que je recommande à tous les géomaticiens photographes.
J'ai ouvert un sujet sur le Forum ExifTool, et j'ai donc trouvé un moyen d'avoir des données plus homogènes.
Sauf qu'il reste encore des données très étrangement formatées, et ce n'est pas lié à ExifTool, mais aux logiciels / appareils photos qui ne respectent pas les standards EXIF).
Je me permets de poster ici mon fil de traitement, au cas où vous verriez des optimisations :
Code:
DROP TABLE IF EXISTS photos.dbphotos; CREATE TABLE photos.dbphotos (Directory text, filename text, DateTimeOriginal text, model text, GPSLatitude numeric, GPSLongitude numeric); COPY photos.dbphotos FROM 'M:\Photos\dbphotos.txt' NULL '-' ENCODING 'UTF-8'; ALTER TABLE photos.dbphotos ADD COLUMN geom geometry(Point,4326); UPDATE photos.dbphotos SET geom = CASE WHEN gpslatitude IS NULL THEN ST_SetSRID(ST_MakePoint(0, 0), 4326) ELSE ST_SetSRID(ST_MakePoint(gpslongitude, gpslatitude), 4326) END; CREATE INDEX dbphotos_geom_gist ON photos.dbphotos USING GIST (geom); ALTER TABLE photos.dbphotos ADD COLUMN datetime timestamp; UPDATE photos.dbphotos SET datetime = COALESCE(to_timestamp(CASE WHEN datetimeoriginal IN (' : : : :', '', '0000:00:00 00:00:00') THEN '1900:01:01 00:00' ELSE datetimeoriginal END,'YYYY:MM:DD HH24:MI'),to_timestamp('1900:01:01 00:00','YYYY:MM:DD HH24:MI'));
Finalement, je garde le champ d'origine au format texte (que je pourrai supprimer, mais qui me permet de voir comment est stockée l'info dans les EXIF), mais j'ajoute un champ de type timestamp.
Je vais ouvrir un autre fil de discussion, car tout cela serait optimisable si on pouvait récupérer toutes les données potentielles des métadonnées de photos directement dans une base de données (là, j'ai limité à quelques champs et une table "à plat")
Dernière modification par Sylvain M. (Sat 02 May 2020 15:54)
Sylvain M.
Hors ligne
Pages: 1
- Sujet précédent - [PostGreSQL] [PSQL] Format date (TimeStamps) dans un import via COPY - Sujet suivant