Vous n'êtes pas identifié(e).
Bonjour,
Certaines tables de postgres 9.0.11 ne se crée pas dans ma nouvelle base postgres 9.3
car toutes les fonctions commencent par st_
exemple lors d'un dump en postgres 9.0.11 les contraintes sont du style CONSTRAINT enforce_srid_the_geom CHECK (srid(the_geom) = 2154
et devrait etre sous la forme CONSTRAINT enforce_srid_the_geom CHECK (st_srid(the_geom) = 2154
Apres des recherches j'ai plusieurs solutions et je cherche la plus efficace
1° ) pour ne pas dumper les contraintes je regarde dans pg_dump ou pg_restore j'ai fait mes tests
ce matin avec --disable-triggers mais rien n'y fait ?
2) toujours pour ne pas dumper les contraintes
on me dit de faire un SET CONSTRAINTS ALL DEFERRED;
donc je lance cette sequence avant le dump ?
une fois le dump fini je remets SET CONSTRAINTS ALL NOT DEFERRABLE ?
et puis lorsque je restore ce dump , une table doit etre créer sans les contraintes et par la suite je dois creer
une fonction en pg/sql pour tout remettre ces contraintes dans cette nouvelle base
3) ou changer dans ma base d'origine tous les srid par st_srid ??? et relancer un dump
via pg_contraint ( consrc ?) avez vous une requete de Mise a jour ? si c'est la solution
4) autre astuce
merci à vous
Dernière modification par mich30 (14/05/2014 13:52:37)
Hors ligne
1. --disable-triggers désactive les triggers, pas les contraintes
2. "SET CONSTRAINTS ALL DEFERRED;" ne sert pas à ça
3. Aucun intérêt
4. Nous dire l'erreur que vous rencontrez pour qu'on connaisse réellement le problème ?
Guillaume.
Hors ligne
voila le message erreur dans la nouvelle monture de postgres9.3 et postgis 2.1 il n'existe plus srid (contrainte)
mais remplacé par st_srid dans les nouvelles versions donc erreur ci dessous
pg_restore: [archiver (db)] could not execute query: ERROR: function public.srid(public.geometry) does not exist
HINT: No function matches the given name and argument types. You might need to add explicit type casts.
Command was: CREATE TABLE pente_expo (
x double precision,
y double precision,
pente double precision,
exposition double ...
pg_restore: [archiver (db)] Error from TOC entry 8005; 0 206822 TABLE DATA pente_expo geniaux
pg_restore: [archiver (db)] could not execute query: ERROR: relation "pente_expo" does not exist
Command was: COPY pente_expo (x, y, pente, exposition, exposition_dist_nord, gid, the_geom) FROM stdin;
la vrai structure de cette table d'origine dans la version postgres9.0.11 postgis 1.3 est
CREATE TABLE occupsol.pente_expo
(
x double precision,
y double precision,
pente double precision,
exposition double precision,
exposition_dist_nord double precision,
gid integer NOT NULL DEFAULT nextval('pente_expo_gid_seq'::regclass),
the_geom geometry,
CONSTRAINT pente_expo_pkey PRIMARY KEY (gid ),
CONSTRAINT enforce_dims_the_geom CHECK (st_ndims(the_geom) = 2),
CONSTRAINT enforce_geotype_the_geom CHECK (geometrytype(the_geom) = 'POINT'::text OR the_geom IS NULL),
CONSTRAINT enforce_srid_the_geom CHECK (srid(the_geom) = 2154)
)
WITH (
OIDS=FALSE
);
donc existe t'il une manip pour pallier ce probleme , merci beaucoup
Hors ligne
j'ai fait ceci sur la nouvelle version de postgres
CREATE OR REPLACE FUNCTION srid(geometry)
RETURNS integer AS
'$libdir/postgis-2.1', 'LWGEOM_get_srid'
LANGUAGE c IMMUTABLE STRICT
COST 1;
ALTER FUNCTION srid(geometry)
OWNER TO postgres;
et a priori ma table se creé ai ce la bonne solution ? merci
Hors ligne
N'y aurait-il pas un script à exécuter pour pouvoir importer un dump postgis 1.3 vers du 2.1 ? à ma connaissance, il y en a un entre la 1.5 et la 2.quelquechose. Bref, jetez un oeil à la documentation de PostGIS, ça doit être expliqué.
Guillaume.
Hors ligne