banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Rencontres QGIS 2025

L'appel à participation est ouvert jusqu'au 19 janvier 2025!

#1 Mon 27 July 2009 09:19

ppluvinet
Participant assidu
Lieu: VALENCE
Date d'inscription: 6 Aug 2007
Messages: 617

POSTGIS : violates check constraint "enforce_srid_the_geom"

Bonjour,

Voilà que j'ai lancé ce week-end une mise à jour de toutes mes tables de ma base postgis pour que toutes mes tables qui sont en lambert II étendu mais dont le SRID correspond à du lambert93 redeviennent en SRID lambert II etendu. (Ce post est un peu la continuité du post http://georezo.net/forum/viewtopic.php?id=61950 mais j'ai préféré écrire un nouveau sujet. )

Pour cela j'ai lancé des requetes de ce style :

Code:

update matable1 set the_geom =  setSRID(the_geom, 27582) ;

Pour les tables créés à partir de croisement de couches, pas de problème.

Mon problème est pour les tables que j'avais importées par un shp2pgsql (avec les options -s 2154 -dDI) et que je n'ai pas modifiées jusqu'à présent. J'ai le message d'erreur suivant :

new row for relation "matable1" violates check constraint "enforce_srid_the_geom"


Que puis-je faire? merci d'avance pour vos réponses.


Pascal PLUVINET

Hors ligne

 

#2 Mon 27 July 2009 09:25

Yves
Membre du bureau
Lieu: Aix-les-Bains
Date d'inscription: 22 Mar 2006
Messages: 9869
Site web

Re: POSTGIS : violates check constraint "enforce_srid_the_geom"

Bonjour,

Il faut modifier les contraintes : ALTER TABLE blabla MODIFY ...

Il y a 3 contraintes pour chaque table spatiale :
1. contrainte sur le SRID pour s'assurer que la projection est correcte ;
2. contrainte de type de géométrie ;
3. contrainte de dimension ;

Seule la 1ere te posera problème.

Y.


Yves Jacolin, bénévole de l'association GeoRezo.net, agit au nom et pour le compte de l'association - Partageons ce qui nous départage !!  - GeoRezo vous aide ? Aidez GeoRezo !

Hors ligne

 

#3 Mon 27 July 2009 09:41

ppluvinet
Participant assidu
Lieu: VALENCE
Date d'inscription: 6 Aug 2007
Messages: 617

Re: POSTGIS : violates check constraint "enforce_srid_the_geom"

Merci Yves.
Qu'est-ce qui est le mieux?  faire un MODIFY ou  faire comme le propose  un sujet sur forumsig : enlever la contrainte, puis de faire la mise à jour avec setsrid, puis de remettre la contrainte.

source :http://www.forumsig.org/showthread.php?t=19572


Pascal PLUVINET

Hors ligne

 

#4 Mon 27 July 2009 09:59

Yves
Membre du bureau
Lieu: Aix-les-Bains
Date d'inscription: 22 Mar 2006
Messages: 9869
Site web

Re: POSTGIS : violates check constraint "enforce_srid_the_geom"

Bonjour,

Je ne sais pas, cela devrait revenir au même. Le fait de laisser la contrainte peut entraîner des difficultés supplémentaires car tout doit "être carré" sinon la contrainte refusera la mise à jour.

Y.


Yves Jacolin, bénévole de l'association GeoRezo.net, agit au nom et pour le compte de l'association - Partageons ce qui nous départage !!  - GeoRezo vous aide ? Aidez GeoRezo !

Hors ligne

 

#5 Mon 27 July 2009 10:55

ppluvinet
Participant assidu
Lieu: VALENCE
Date d'inscription: 6 Aug 2007
Messages: 617

Re: POSTGIS : violates check constraint "enforce_srid_the_geom"

Autre souci : Avant toutes les tables étaient visible sous QGIS et se superposaient car dans la même zone d'étude. J'ai changé le srid des tables, toute de la même manière avec la fonction setSRID. Or désormais, certaines tables ne s'affiche plus dans QGIS (elles sont bien présentes dans la légende, la table d'attibut est correcte). Lorsque je demande sur ces tables "zoomer sur l'emprise de la couche",  QGIS zoome effectivement bien au bon endroit mais rien à l'affichage.

Pour d'autres tables, aucun souci, elles s'affichent correctement.

Peut-être une piste : quand je fais "enregistrer en shapefile, il me propose un export en lambert 93 (alors que le srid sous postgis est bien le lambert II Carto 27582) et que je rappelle que qgis zoome effectivement au bon endroit)

Des explications, des suggestions?


Pascal PLUVINET

Hors ligne

 

#6 Mon 27 July 2009 11:00

Yves
Membre du bureau
Lieu: Aix-les-Bains
Date d'inscription: 22 Mar 2006
Messages: 9869
Site web

Re: POSTGIS : violates check constraint "enforce_srid_the_geom"

Quelques pistes :

Vérifie les configurations de la projection du projet et des couches clic droit dans la légende).

Est ce que la table geometry_columns possède des données correcte ?

Y.


Yves Jacolin, bénévole de l'association GeoRezo.net, agit au nom et pour le compte de l'association - Partageons ce qui nous départage !!  - GeoRezo vous aide ? Aidez GeoRezo !

Hors ligne

 

#7 Mon 27 July 2009 11:26

ppluvinet
Participant assidu
Lieu: VALENCE
Date d'inscription: 6 Aug 2007
Messages: 617

Re: POSTGIS : violates check constraint "enforce_srid_the_geom"

J'ai une table des départements français et une table des iris de la région paca. La table des départements français s'affiche correctement. quand je fais un clic droit :

+proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=0 +k_0=0.99987742 +x_0=600000 +y_0=2200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=2.3372291666985 +units=m +no_defs


et quand je clic sur changement de CRS, qgis me propose bien  le EPSG 27582.

Pour la table iris_paca. Lorsque je zoome sur l'emprise de la couche, QGIS zomme bien sur l'emprise des départements de PACA. Mais rien ne s'affiche. Dans les propriétés d'affichage j'ai:

+proj=lcc +lat_1=49 +lat_2=44 +lat_0=46.5 +lon_0=3 +x_0=700000 +y_0=6600000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs .


Si je fais "changement de CRS, il me propose le RGF93. Je change alors en EPSG 27582. Rien ne se passe!

Une autre piste: si je crée la table suivante :

create table essai_iris as select * from iris_paca ;
ALTER TABLE essai_iris ADD column gggid serial;
ALTER TABLE essai_iris ADD PRIMARY KEY (gggID);


et que j'affiche essai_iris, elle s'affiche correctement !!!!


Y'a quelque chose qui cloche quand même !!!
Le problème c'est que je peux pas faire des copies de toutes les tables (certaines sont très grosses et j'ai pas tellement de place!)

De nouvelles pistes?
Yves, pourrais -tu me précisé ce que tu entends par:

Est ce que la table geometry_columns possède des données correcte ?


Encore merci d'avance

Dernière modification par ppluvinet (Mon 27 July 2009 13:54)


Pascal PLUVINET

Hors ligne

 

#8 Mon 27 July 2009 11:30

Yves
Membre du bureau
Lieu: Aix-les-Bains
Date d'inscription: 22 Mar 2006
Messages: 9869
Site web

Re: POSTGIS : violates check constraint "enforce_srid_the_geom"

Vérifie que les données dans la table geometry_columns sont correctes:

Code:

SELECT * FROM geometry_columns;

Si la projection de la table iris_paca est incorrrecte cela explique les soucis. En gros il faut vérifier les contraintes, les méta-données et les données (avec SRID(the_geom)) pour trouver où le problème se trouve !

Y.


Yves Jacolin, bénévole de l'association GeoRezo.net, agit au nom et pour le compte de l'association - Partageons ce qui nous départage !!  - GeoRezo vous aide ? Aidez GeoRezo !

Hors ligne

 

#9 Mon 27 July 2009 11:50

ppluvinet
Participant assidu
Lieu: VALENCE
Date d'inscription: 6 Aug 2007
Messages: 617

Re: POSTGIS : violates check constraint "enforce_srid_the_geom"

Merci Yves, je crois qu'on avance mais que mes connaissances en postgis ne sont pas encore suffisantes.

Si je fais :

select srid(the_geom) from dep_fr ;


Je trouve une liste de 27582

Si je fais la même chose avec iris_paca :

select srid(the_geom) from iris_paca ;


Je trouve également une liste de 27582

Par contre, lorsque je fais:

SELECT * FROM geometry_columns;


Je n'ai qu'une partie des tables (seulement celles où j'ai un problème d'affichage dont iris_paca + des tables qui n'existent plus dont j'avais fait il y a quelque temps un drop table) et effectivement le srid de chacune d'elle est 2154.

2 questions alors :
1) comment se fait-il que la plupart de mes tables ne sont pas présentes dans geometry_columns?
2) comment changer le srid dans geometry_columns ? un simple update?
Merci d'avance

Dernière modification par ppluvinet (Mon 27 July 2009 11:56)


Pascal PLUVINET

Hors ligne

 

#10 Mon 27 July 2009 12:00

Yves
Membre du bureau
Lieu: Aix-les-Bains
Date d'inscription: 22 Mar 2006
Messages: 9869
Site web

Re: POSTGIS : violates check constraint "enforce_srid_the_geom"

ppluvinet a écrit:

2 questions alors :
1) comment se fait-il que la plupart de mes tables ne sont pas présentes dans geometry_columns?
2) comment changer le srid dans geometry_columns ? un simple update?
Merci d'avance


Pour que cette table soit renseignée, il faut :
* soit créer la colonne avec la requete SELECT AddGeometryColumn()
* soit la rajouter toi même : INSERT INTO geoemtry_column ...:

si tu fais un CREATE TABLE Toto AS ... la table toto ne sera pas renseignée dans la table geometry_colums.

Dans ton cas il faut que tu fasses un UPDATE geometry_column SET srid=27582 WHERE f_table_name='toto';

Pour supprimer une table spatiale, il est recommandé d'utiliser SELECT DroGeometryTable(); plus propre. Mais tu peux effacer les lignes inutiles directement dans la table geometry_columns.

Note que la version 1.4.0 de postGIS sortie la semaine dernière a maintenant une fonction pour mettre à jour automatiquement cette table en recherchant les colonnes géométriques.

Y.


Yves Jacolin, bénévole de l'association GeoRezo.net, agit au nom et pour le compte de l'association - Partageons ce qui nous départage !!  - GeoRezo vous aide ? Aidez GeoRezo !

Hors ligne

 

#11 Mon 27 July 2009 13:55

ppluvinet
Participant assidu
Lieu: VALENCE
Date d'inscription: 6 Aug 2007
Messages: 617

Re: POSTGIS : violates check constraint "enforce_srid_the_geom"

Ok, merci. Je vais réparer et nettoyer tout cela. Encore merci pour la rapidité et la précision des réponses.


Pascal PLUVINET

Hors ligne

 

#12 Mon 27 July 2009 14:43

ppluvinet
Participant assidu
Lieu: VALENCE
Date d'inscription: 6 Aug 2007
Messages: 617

Re: POSTGIS : violates check constraint "enforce_srid_the_geom"

OK, Tout marche bien. Je peux de nouveau visualiser mes couches dans QGIS.

Pour synthétiser:
Lorsque l'on souhaite changer le SRID d'une table qui est en EPSG=2154 en EPSG=27582 (attention sans transformation, il ne s'agit pas de reprojeter :

Code:

alter table matable   drop CONSTRAINT enforce_srid_the_geom;
update matable    set the_geom =  setSRID(the_geom, 27582) ;
ALTER TABLE matable     add CONSTRAINT enforce_srid_the_geom  CHECK (srid(the_geom) = 27582);

UPDATE geometry_columns SET srid=27582 WHERE srid=2154;

Encore merci à Yves


La question  que je me pose encore, c'est à quoi sert précisément la table geometry_columns ? Si c'est long à expliquer, auriez-vous éventuellement un lien à me suggérer?
Aussi, pensez vous nécessaire que je nettoie cette table (= enlever les tables obsolètes et rajouter les tables créées par un "create table select as..." ? puisque jusqu'à présent je m'en suis passé...

Peut-être est-ce un nouveau sujet et que cela nécessite un nouveau post....


Pascal PLUVINET

Hors ligne

 

#13 Mon 27 July 2009 15:07

Yves
Membre du bureau
Lieu: Aix-les-Bains
Date d'inscription: 22 Mar 2006
Messages: 9869
Site web

Re: POSTGIS : violates check constraint "enforce_srid_the_geom"

Bonjour,

Certains logiciels se servent de cette table pour retrouver les tables spatiales et récupérer les informations qui lui sont nécessaire : projection, type de géométrie, nom de la colonne spatiale, dimension.

Pour ma part j'essaye de la garder à jour autant que possible. Pour moi c'est une table de méta-données, cela implique des contraintes mais cela informe mon système ou moi même sur mes données.

Y.


Yves Jacolin, bénévole de l'association GeoRezo.net, agit au nom et pour le compte de l'association - Partageons ce qui nous départage !!  - GeoRezo vous aide ? Aidez GeoRezo !

Hors ligne

 

#14 Mon 27 July 2009 15:11

Yves
Membre du bureau
Lieu: Aix-les-Bains
Date d'inscription: 22 Mar 2006
Messages: 9869
Site web

Re: POSTGIS : violates check constraint "enforce_srid_the_geom"

Quelques précisions de la liste postgis :

Geometry_columns is a table (OGC standard) that allows other apps  (Mapserver,
QuantumGIS, ecc.) to use postgis data. All standard OGC applications looks at
geometry_columns to have a complete overview of geographic data in your
database.
If you work only in postgis, you can forget about geometry_columns but you'll
find problems when you will use your data from other applications (mapserver
for example doesn't show geographical data if geometry_columns is not
correct).


Me servant de QGIS et de MapServer, je suis donc obligé de la mettre à jour wink

Y.


Yves Jacolin, bénévole de l'association GeoRezo.net, agit au nom et pour le compte de l'association - Partageons ce qui nous départage !!  - GeoRezo vous aide ? Aidez GeoRezo !

Hors ligne

 

#15 Wed 08 June 2011 16:51

Yves_38
Juste Inscrit !
Date d'inscription: 30 Dec 2010
Messages: 3

Re: POSTGIS : violates check constraint "enforce_srid_the_geom"

Bonjour,
je suis actuellement stagiaire en SIG et débutant en ce qui concerne postgres/postgis. Je suis bloqué car le SRID des tables de la base PostGIS n'est pas défini. Je cherche alors à définir un SRID pour mes différentes tables, et votre méthode me parait bonne, mais je suis confronté à un problème. L'éxécution du SQL n'en fini pas. Alors que je n'ai que 168 enregistrement.

Voici mon script:

Code:

alter table carto.adsl_2mb  drop CONSTRAINT enforce_srid_geom;
update carto.adsl_2mb set geom = setsrid(geom, 27572);
Alter table carto.adsl_2mb add CONSTRAINT enforce_srid_geom CHECK (srid(geom) = 27572);
UPDATE geometry_columns SET srid=27572 WHERE f_table_name='adsl_2mb';


ma table "adsl_2mb" du schéma carto a un SRID = -1. Ma version de Pgadmin est la version 1.12.3.


Si quelqu'un peut me donner une explication, ou juste me dire que l'exécution est TRES lente (de l'ordre de plusieurs dixaines de minutes).

En tout cas merci pour vos précédentes explications qui m'ont permis d'arriver jusque là!! et en comprenant big_smile !!

Hors ligne

 

Pied de page des forums

Powered by FluxBB