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

#1 Re : Général » Comment utiliser le types géographique de postgresql » 01/06/2009 22:27:44

Bonjour,
Vue le peu de réponse je me permet de vous orienter vers ce genre de doc concernant postgis.
http://www.davidgis.fr/documentation/wi … index.html

anoime a écrit :

créer une base de données postgis pour stocker les données géographique

C'est une bonne idée mais pas besoin d'une nouvelle, il suffit d'ajouter les fonctionnalités postgis à votre base existante.
Enfin si vraiment l'idée de liaison est votre solution alors il faut se tourner vers dblink

Bonne soirée

#2 Re : Général » Utilisation des null dans une procedure plpgsql » 01/06/2009 22:11:43

Bonsoir,
Merci pour les réponses, j'ai eu un pb avec votre code, peut être l'histoire du standard_conforming_strings à ON ??

Mais avec la petite modif ci dessous cela passe bien

PERFORM dblink_exec('dbname=base_test3','INSERT INTO t_test3(nb1,nb2,texte,id_base_source) 
VALUES ('|| NEW.nb1 ||','|| COALESCE(NEW.nb2::text,'NULL') ||','|| COALESCE(NEW.text1::text,'NULL') ||',	1)');

Je vais quand même regarder cette histoire de standard_conforming_strings dès que possible

Merci smile smile
@+

#3 Re : Général » Utilisation des null dans une procedure plpgsql » 29/05/2009 16:56:14

Bonjour,
C'est la première piste que j'ai suivi mais sans résultat pour le moment, si je fait :

VALUES ('|| NEW.nb1 ||','|| COALESCE(NEW.nb2,NULL) ||','''|| COALESCE(NEW.text1,NULL) ||''',1)');

le coalesce renvoi NULL et donc tous vaut null et rien ne passe
et avec un ajout de simple quote autour du NEW.text1 il ajoute la chaine 'NULL' dans le champ text1 et cela ne fonctionne pas pour le champ nb2 puisque c'est un entier attendu.
rq là c'est normal, c'est ce que je lui demande dans le cas présent, or moi il me faut des vrai NULL ?

VALUES ('|| NEW.nb1 ||','|| COALESCE(NEW.nb2,NULL) ||','''|| COALESCE(NEW.text1,'NULL') ||''',1)');

je n'ai pas trouvé la bonne combinaison de quote pour le moment

Merci

#4 Général » Utilisation des null dans une procedure plpgsql » 29/05/2009 15:08:55

jduv
Réponses : 4

Bonjour à tous,

Voici mon pb sur lequel je bloque depuis quelques temps.

Je veux utiliser un trigger pour déclencher l'insertion dans une base distante en utilisant dblink, j'ai donc écrit la procédure ci dessous qui fonctionne bien sauf dans un cas :
si l'un des champs est null alors rien ne se passe

Je met ici le code de création des tables et de la procédure :

Base 1 :
 

CREATE TABLE t_test1
(
  id_test serial NOT NULL,
  nb1 integer NOT NULL,
  nb2 integer,
  text1 character varying(20),
  CONSTRAINT t_test1_pkey PRIMARY KEY (id_test)
)
WITH (OIDS=TRUE);

CREATE TRIGGER trigger_new_tuple
  AFTER INSERT
  ON t_test1
  FOR EACH ROW
  EXECUTE PROCEDURE gen_new_tuple();

CREATE OR REPLACE FUNCTION gen_new_tuple()
  RETURNS "trigger" AS
$BODY$
BEGIN

		PERFORM dblink_exec('dbname=base_test3','INSERT INTO t_test3(nb1,nb2,texte,id_base_source) VALUES ('|| NEW.nb1 ||','|| NEW.nb2 ||','''|| NEW.text1 ||''',1)');
		RETURN NEW;

END;
$BODY$
  LANGUAGE 'plpgsql' VOLATILE;

et la base de destination base 3

CREATE TABLE t_test3
(
  id_test serial NOT NULL,
  nb1 integer NOT NULL,
  nb2 integer NOT NULL,
  id_base_source integer NOT NULL,
  texte character varying(20),
  CONSTRAINT t_test3_pkey PRIMARY KEY (id_test)
)
WITH (OIDS=TRUE);

Donc en résumé si je fait :

INSERT INTO t_test1(nb1,nb2,text1) VALUES (10,11,'toto');

Je récupére bien 10,11,toto,1 dans ma base3 table t_test3

mais dès que l'une des valeurs de nb2 ou text1 est null alors rien ne se passe ??

Si quelqu'un a une solution qui saute aux yeux je suis preneur,
J'ai essayé avec des COALESCE(val,NULL) et d'autres mais rien à faire.

Merci d'avance de toute piste.

Pied de page des forums

Propulsé par FluxBB