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

#1 Re : Java » version minimale postgresql.jar pour postgres 13 » 13/01/2021 22:57:04

Bin, si. C'est un peu le principe d'une liste de discussions.

#3 Re : Java » version minimale postgresql.jar pour postgres 13 » 13/01/2021 16:32:56

Connaissant les développeurs de ce driver, je suis certain que leur dernière version est compatible avec PostgreSQL. Il est possible que la 42.2.5 le soit aussi, même si j'en doute (du fait des changements dans les catalogues systèmes PostgreSQL). Le meilleur moyen de s'en assurer est de leur demander sur leur liste de discussion. N'utilisant pas Java, je ne saurais pas aller plus loin.

#4 Re : Java » version minimale postgresql.jar pour postgres 13 » 13/01/2021 12:42:38

Le site indique que "The current version of the driver should be compatible with PostgreSQL 8.2 and higher". Du coup, j'utiliserais plutôt la version la plus récente du driver (donc la 42.2.18). De plus, cette version est sortie après la version 13 de PostgreSQL, donc elle a bien plus de chance d'être compatible qu'une version qui date de 2018 (votre 42.2.5).

#5 Re : PL/pgSQL » update concatenation champ + row_number » 07/01/2021 14:36:05

Ah, j'oubliais aussi que la table ouvrage_v3.hydro_zone est déclarée avec une colonne bv, mais que le INSERT se fait sur une colonne insee. Il faut tester son jeu de tests pour s'assurer que tout sera reproductible.

#6 Re : PL/pgSQL » update concatenation champ + row_number » 07/01/2021 14:31:28

Déjà, merci beaucoup pour avoir fait l'effort de ce long texte et de ces exemples. Mais il y a un gros problème. Dès le départ, le premier script ne pourra pas s'exécuter correctement :

CREATE TABLE ouvrage_v3.communes (insee text, geom);  -- ce CREATE ne peut pas fonctionner, il manque à priori le nom de la colonne de type geom
INSERT INTO ouvrage_v3.communes (insee) VALUES ('83044');
INSERT INTO ouvrage_v3.communes (insee) VALUES ('83013');

CREATE TABLE ouvrage_v3.hydro_zone (bv text, geom); -- pareil pour ce CREATE
INSERT INTO ouvrage_v3.hydro_zone (insee) VALUES ('X230');
INSERT INTO ouvrage_v3.hydro_zones (insee) VALUES ('X240'); -- la table s'appelle hydrozone, sans s

Ces deux petites fautes ne sont pas graves, mais je ne vais pas perdre du temps à vérifier tout le reste du code. Merci de vérifier votre code et de corriger tout ça avant qu'on puisse vous aider réellement. Merci.

#7 Re : Général » pg_dumpall n'exporte pas le schema public » 07/01/2021 14:26:18

Le schéma public est supposé exister. Si vous n'en avez pas, créez le avant de lancer la restauration.

#8 Re : PL/pgSQL » update concatenation champ + row_number » 06/01/2021 18:03:19

Ça manque d'un exemple complet montrant le problème parce que, pour moi, ça marche :

INSERT INTO ouvrage_v3.ouv_protec_epci_ca_dracenoise VALUES ('X241', '83044', 'prout');
INSERT INTO ouvrage_v3.ouv_protec_epci_ca_dracenoise VALUES ('X230', '83044', 'prout2');
TABLE ouvrage_v3.ouv_protec_epci_ca_dracenoise ;
┌──────┬───────┬──────────────┐
│  bv  │ insee │  id_ouvrage  │
├──────┼───────┼──────────────┤
│ X230 │ 83044 │ X230_83044_1 │
│ X230 │ 83044 │ X230_83044_2 │
│ X240 │ 83013 │ X240_83013_1 │
│ X241 │ 83044 │ X241_83044_1 │
│ X241 │ 83044 │ X241_83044_2 │
│ X241 │ 83044 │ X241_83044_3 │
│ X241 │ 83044 │ X241_83044_4 │
│ X230 │ 83044 │ X230_83044_3 │
└──────┴───────┴──────────────┘
(8 rows)

#9 Re : PL/pgSQL » update concatenation champ + row_number » 05/01/2021 23:33:05

Ah, et pour répondre sur l'export complet de la base, non parce que trop gros, et potentiellement contenant des informations à ne pas divulguer. Un exemple simple montrant le problème et pouvant le reproduire, comme celui montré dans mon commentaire précédent.

#10 Re : PL/pgSQL » update concatenation champ + row_number » 05/01/2021 23:31:11

Toutes les requêtes permettant de rejouer votre exemple de trigger, de manière à tester nous même et corriger, en s'assurant que la correction convienne. Voilà un exemple :

CREATE SCHEMA ouvrage_v3;
CREATE TABLE ouvrage_v3.ouv_protec_epci_ca_dracenoise (bv text, insee text, id_ouvrage text);
CREATE FUNCTION ouvrage_v3.generate_id_ouvrage() RETURNS TRIGGER AS
$BODY$
BEGIN
NEW.id_ouvrage = NEW.bv||'_'||NEW.insee||'_'||(SELECT(count(*)+1)::text FROM ouvrage_v3.ouv_protec_epci_ca_dracenoise WHERE bv=NEW.bv and insee=NEW.insee);
RETURN NEW;
END;
$BODY$
LANGUAGE plpgsql;
CREATE TRIGGER tr1
  BEFORE INSERT OR UPDATE ON ouvrage_v3.ouv_protec_epci_ca_dracenoise
  FOR EACH ROW EXECUTE FUNCTION ouvrage_v3.generate_id_ouvrage();
INSERT INTO ouvrage_v3.ouv_protec_epci_ca_dracenoise (bv, insee) VALUES ('X230', '83044');
INSERT INTO ouvrage_v3.ouv_protec_epci_ca_dracenoise (bv, insee) VALUES ('X230', '83044');
INSERT INTO ouvrage_v3.ouv_protec_epci_ca_dracenoise (bv, insee) VALUES ('X240', '83013');
INSERT INTO ouvrage_v3.ouv_protec_epci_ca_dracenoise (bv, insee) VALUES ('X241', '83044');
INSERT INTO ouvrage_v3.ouv_protec_epci_ca_dracenoise (bv, insee) VALUES ('X241', '83044');
INSERT INTO ouvrage_v3.ouv_protec_epci_ca_dracenoise (bv, insee) VALUES ('X241', '83044');
SELECT * FROM ouvrage_v3.ouv_protec_epci_ca_dracenoise;

Ce qui donne comme résultat :

CREATE SCHEMA
CREATE TABLE
CREATE FUNCTION
CREATE TRIGGER
INSERT 0 1
INSERT 0 1
INSERT 0 1
INSERT 0 1
INSERT 0 1
INSERT 0 1
┌──────┬───────┬──────────────┐
│  bv  │ insee │  id_ouvrage  │
├──────┼───────┼──────────────┤
│ X230 │ 83044 │ X230_83044_1 │
│ X230 │ 83044 │ X230_83044_2 │
│ X240 │ 83013 │ X240_83013_1 │
│ X241 │ 83044 │ X241_83044_1 │
│ X241 │ 83044 │ X241_83044_2 │
│ X241 │ 83044 │ X241_83044_3 │
└──────┴───────┴──────────────┘
(6 rows)

Ce qui m'a permis de remarquer que je m'étais trompé dans le code de la fonction. Et qu'après correction, que ma nouvelle proposition fonctionnait.

#11 Re : PL/pgSQL » update concatenation champ + row_number » 05/01/2021 17:49:52

Pourquoi il tourne en rond est asse évident. Comme vous ne nous ave toujours pas fourni d'exemple complet, je vais supposer que vous ave défini ce tirgger sur Je uppose que vous avez défini ce trigger sur la table ouvrage_v3.ouv_protec_epci_ca_dracenoise pour les opérations UPDATE. Donc au premier UPDATE, le trigger se déclenche. La fonction associée au trigger lance un UPDATE sur la même table. Du coup, hop, le trigger se déclenche. Ce qui exécute la fonction qui fait un UPDATE sur la table. Et hop, le trigger se déclenche... et ainsi de suite, il n'en finit jamais. Ou plus exactement, il finit par s'arrêter parce que la limite de la pile d'appel est atteinte.

La documentation l'indique bien. Il ne faut pas faire un UPDATE de la table, mais changer la valeur du champ. Du coup, ça devrait donner ceci comme définition de fonction, encore une fois sans aucune garantie parce que, encore une fois, vous ne nous avez toujours pas donné d'exemple complet :

CREATE OR REPLACE FUNCTION ouvrage_v3.id_ouvrage_ca_dracenoise() RETURNS TRIGGER AS
$BODY$BEGIN
NEW.id_ouvrage = bv||'_'||insee||'_'||(SELECT(count(*)+1)::text FROM ouvrage_v3.ouv_protec_epci_ca_dracenoise WHERE bv=NEW.bv and insee=NEW.insee);
RETURN NEW;
END;$BODY$
LANGUAGE plpgsql VOLATILE
COST 100; 

De plus, vous aviez oublié le RETURN NEW.

#12 Re : PL/pgSQL » update concatenation champ + row_number » 04/01/2021 10:11:31

C'est pour stocket temporairement la valeur du résultat du count+1, pour ensuite le concaténer à l'identifiant. J'aurais aussi pu dire :

SELECT bv||'_'||insee||'_'||(count(*)+1)::text FROM ouv_protec_epci_ca_dracenoise WHERE bv=NEW.bv et insee=NEW.insee;

la valeur renvoyée par le SELECT étant maintenant l'identifiant complet.

#13 Re : Général » utiliser un script de sauvegarde de la base de données » 03/01/2021 15:24:23

Comme vous parlez d'un .exe, je suppose que vous êtes sous Windows. Donc a priori, il faudra passer par une tâche planifiée. Par contre, n'ayant pas utilisé Windows depuis plus de 13 ans, je ne saurais pas plus vous aider sur ce point.

Un point supplémentaire néanmoins. La version 8.2 n'est plus maintenue depuis 2011, soit 9 ans de bugs non corrigées (https://www.postgresql.org/support/versioning/). Si vous tenez un tant soit peu à vos données, migrez vers une version maintenue.

#14 Re : PL/pgSQL » update concatenation champ + row_number » 01/01/2021 13:25:31

C'est très clair et c'est donc bien ce que j'avais compris. Je maintiens donc ma solution si on parle bien d'une fonction trigger qui s'exécutera à chaque insertion.

À l'insertion, le code que je propose va compter le nombre d'éléments contenant déjà le même bv et code insee, ce qui permettra de trouver la séquence suivante pour la numérotation de l'ouvrage. Dans l'exemple donné, pour un bv X230 et un code insee 83044, le SELECT reverra 4 (le nombre d'éléments + 1), ce qui permettra par concaténation d'obtenir X230-83044-4 pour la ligne en cours d'insertion.

#15 Re : Général » ouvrir un projet sur github » 01/01/2021 12:43:02

C'est clairement pas une question sur PostgreSQL, mais plutôt sur NodeJS. Le mieux est de poser cette question sur un forum NodeJS, voire créer un ticket sur le projet GitHub qui héberge cette page. D'autres ici pourront peut-être répondre à votre question mais c'est pas du tout sûr vu que le problème n'est pas sur PostgreSQL.

#16 Re : PL/pgSQL » update concatenation champ + row_number » 31/12/2020 10:34:10

Apparemment, je n'ai pas compris ce que vous cherchiez à faire, donc il serait mieux que vous repreniez votre explication, votre demande à la base pour qu'on vous aide au mieux.

#17 Re : Général » ouvrir un projet sur github » 31/12/2020 10:32:41

Qu'est-ce que vous tapez ? quel est l'erreur ?

#18 Re : PL/pgSQL » update concatenation champ + row_number » 30/12/2020 15:12:36

En gros, là, vous demandez à la fonction de mettre à jour la colonne id_ouvrage pour toutes les lignes de la table ouv_protec_epci_ca_dracenoise. Or, si j'ai bien compris, vous voulez seulement mettre à jour cette colonne pour la ligne qui déclenche le trigger. Donc il faudra plutôt faire un "NEW.id_ouvrage := une_certaine_valeur". Et "une_certaine_valeur" sera le résultat d'un calcul provenant de la recherche du nombre de lignes partageant le même bassin versant et code insee que la ligne déclenchant le trigger. Ce qui ferait plutôt ce type de code :

SELECT count(*)+1 INTO valeur FROM ouv_protec_epci_ca_dracenoise WHERE bv=NEW.bv et insee=NEW.insee;
NEW.id_ouvrage = bv||'_'||insee||'_'||valeur;

Tout le code n'est pas là, et je peux m'être trompé sur le nom des colonnes. À corriger donc.

En cas de problème, merci de fournir un cas de test complet.

#20 Re : PgAdmin3 » Batch de 10 sauvegardes sql » 22/12/2020 22:37:21

Encore une fois, ce n'est pas très clair. Déjà, vous ne pourrez pas tout restaurer en une seule commande. Vous aurez besoin de dix commandes pg_restore. De plus, ça ne sera pas forcément suffisant. Je suppose qu'il s'agit des mêmes tables, mais avec des données partiellement différentes. Certaines contraintes risquent de poser problème. Bref, à moins que chaque sauvegarde contient des objets nommés différemment entre les sauvegardes, cela va être un gros chantier que de les assembler.

#21 Re : PL/pgSQL » migration oracle/postgre » 10/12/2020 22:39:49

Oui, c'est bien l'idée. L'instruction DO permet d'exécuter une procédure dite anonyme, parce que sans nom.

#22 Re : Optimisation » Creation index sur colonne text » 05/12/2020 12:10:45

L'extension pg_trgm peut vous aider dans ce cas. C'est au moins à tester.

#24 Re : Général » Création d'une fonction retournant une table » 27/11/2020 22:46:43

Avec une requête SQL seule, ce n'est pas possible, mais avec une fonction, par exemple en PL/pgsql, c'est tout à fait possible. La documentation de ce langage se trouve sur https://docs.postgresql.fr/13/plpgsql.html

#25 Re : Optimisation » requête lente via fdw » 27/11/2020 15:31:00

Pour que l'envoi d'un SET ait du sens, il faudrait s'assurer que toutes les requêtes de la session utilisent la même connexion. Même si postgres_fdw essaie de conserver sa connexion sur une même session, il n'y a aucune garantie que ce soit le cas. En dehors de ce petit problème technique, il n'y a aucun patch en cours à ce sujet à ma connaissance.

Pied de page des forums

Propulsé par FluxBB