Message posté par : Sylvain M.
----------------------------------------
-----------------
Citation :
ça n'a pas l'air si compliqué que ça
-----------------
Bon, pas si compliqué que ça, je me suis un peu surestimé.
Voici ce que j'ai fait :
-----------------
Code :
-- création d'une table temporaire avec une ligne par object JSON
CREATE TABLE photos.dbphotosjsontxt_rows (jsontxt_rows text);
COPY photos.dbphotosjsontxt_rows FROM 'M:\Photos\dbphotos.json';
-- aggrégation de objects JSON sur une seule ligne
CREATE TABLE photos.dbphotosjsontxt AS (SELECT string_agg(jsontxt_rows,'') AS
jsontxt FROM photos.dbphotosjsontxt_rows);
-- création de la table finale des métadonnées au format JSON
CREATE TABLE photos.dbphotosjson(valjson json);
-- importation des données via une conversion via json_array_elements()
INSERT INTO photos.dbphotosjson (SELECT valjson FROM (SELECT
json_array_elements(replace(jsontxt,'\\','\\\\')::json) AS valjson FROM
photos.dbphotosjsontxt) a);
-----------------
En effet, l'import depuis le JSON, qui est formaté avec 1 ligne par objet, ne passait
pas directement avec json_array_elements().
Je suis donc passé par des tables temporaires au format texte, multilignes, puis
aggrégées.
Si vous voyez de grossières erreurs ou améliorations possibles, n'hésitez pas à me les
signaler.
Le point de blocage actuel, c'est que cette requête fonctionne depuis mon client SQL
(DBeaver), mais pas via PSQL depuis un fichier batch (ce que je souhaiterais) :
-----------------
Code :
psql -h localhost -U monuser -d mabdd -f import_dbphotosjson.sql
-----------------
Je pense que c'est un problème d'échappement de caractères spéciaux, mais je ne
vois pas comment le contourner.
Si vous pouvez m'éclairer, je vous en serai reconnaissant !
----------------------------------------
Le message est situé
https://georezo.net/forum/viewtopic.php?pid=332695#p332695
Pour y répondre : geobd(a)ml.georezo.net ou reply de votre messagerie
Pour vous désabonner connectez-vous sur le forum puis Profil / Abonnement
--
Association GeoRezo - le portail géomatique
https://georezo.net