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

#1 14/05/2014 13:51:58

mich30
Membre

migration 9.0.11 -postgis 1.5.3 en 9.3 - 1.2.1 ( srid en st_srid)

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

#2 14/05/2014 22:21:25

gleu
Administrateur

Re : migration 9.0.11 -postgis 1.5.3 en 9.3 - 1.2.1 ( srid en st_srid)

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

#3 15/05/2014 10:21:57

mich30
Membre

Re : migration 9.0.11 -postgis 1.5.3 en 9.3 - 1.2.1 ( srid en st_srid)

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

#4 15/05/2014 10:40:13

mich30
Membre

Re : migration 9.0.11 -postgis 1.5.3 en 9.3 - 1.2.1 ( srid en st_srid)

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

#5 15/05/2014 21:52:16

gleu
Administrateur

Re : migration 9.0.11 -postgis 1.5.3 en 9.3 - 1.2.1 ( srid en st_srid)

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

Pied de page des forums