PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

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

#1 28/03/2015 18:42:06

Interrogation des tables système via ODBC

Bonjour,

J'utilise postgresql 9.4.1-1 x64 sous Window 7 et l'ODBC Unicode x64 v 9.03.03.00

Lorsque je fais, via ODBC, une requête sur une table système (par exemple "select * from Information_Schema.Tables")  j'obtiens l'erreur "la colonne « ctid » n'existe pas; Error while executing the query".

Les requêtes sur les tables créées fonctionnent bien

Hors ligne

#2 29/03/2015 17:22:29

gleu
Administrateur

Re : Interrogation des tables système via ODBC

Cela ressemble à une erreur de configuration de psqlodbc ou à un bug de psqlodbc. Quel requête est envoyée à PostgreSQL par ce driver ? (attention, je ne demande pas quelle requête vous exécutez, mais celle que reçoit PostgreSQL)

Hors ligne

#3 30/03/2015 12:25:01

Re : Interrogation des tables système via ODBC

Désolé, je ne comprends pas le distinguo de votre question.

Hors ligne

#4 30/03/2015 16:32:46

gleu
Administrateur

Re : Interrogation des tables système via ODBC

Vous envoyez "select * from Information_Schema.Tables" au driver psqlodbc. Cette requête ne cherche pas à récupérer une colonne ctid (qui est une colonne système, donc non concernée quand on utilise l'étoile). Du coup, psqlodbc doit certainement modifier la requête pour réclamer cette colonne supplémentaire. Ou exécuter d'autres requêtes, dont une qui réclamerait cette colonne. Bref, il faudrait savoir quelle requête demande justement de cette colonne.

Hors ligne

#5 30/03/2015 17:44:33

Re : Interrogation des tables système via ODBC

La requête est
SELECT table_name FROM information_schema.tables WHERE table_schema = 'migsite' AND table_type = 'BASE TABLE' AND table_name LIKE 'mig%'
J'ai essayé sans la clause WHERE, mais cela ne change rien. J'ai également essayé de retourner une autre colonne, ou d'en retourner plusieurs. J'ai enfin tenté SELECT 1 FROM information_schema.table.

Hors ligne

#6 30/03/2015 17:54:31

Re : Interrogation des tables système via ODBC

Note : Je viens d'essayer une autre table système (SELECT relname  FROM pg_class) et cela fonctionne !
Existe-il des équivalents pg_xxx aux tables information_schema.table et information_schema.columns ?

Hors ligne

#7 30/03/2015 19:08:31

Re : Interrogation des tables système via ODBC

Je continue ...
SELECT tablename FROM pg_table renvoie la même erreur

Pour les colonnes, c'est par contre ok avec
SELECT attname FROM pg_attribute WHERE attnum > 0 AND  attrelid = 'nom_schema.nom_table'::regclass AND NOT attisdropped ORDER BY attnum

Hors ligne

#8 30/03/2015 22:24:01

gleu
Administrateur

Re : Interrogation des tables système via ODBC

Vous avez une erreur à chaque fois que vous cherchez à lire une vue. Vous n'avez pas d'erreur avec les tables. Bref, ça ressemble à un bug du driver psqlodbc.

Hors ligne

#9 30/03/2015 23:43:43

rjuju
Administrateur

Re : Interrogation des tables système via ODBC

À priori le problème n'est pas vraiment nouveau, ni facile à régler. Par exemple: http://www.postgresql.org/message-id/40 … hemesh.biz

Hors ligne

Pied de page des forums