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 06/08/2010 16:16:57

baradji
Membre

Recherche enregistrement dans toutes les tables

Bonjour,
Je cherche à savoir dans quelle champs et dans quelle table appartient un enregistrement.
Existe t'il une fonction dans postgresql me permettant ceci?

Merci

Hors ligne

#2 06/08/2010 16:24:45

Marc Cousin
Membre

Re : Recherche enregistrement dans toutes les tables

Bonjour,

La question est un peu trop vague, vous pouvez préciser ?

Vous avez une chaine de caractère, et vous voulez la chercher dans toute la base, indistinctement ?


Marc.

Hors ligne

#3 06/08/2010 16:55:00

baradji
Membre

Re : Recherche enregistrement dans toutes les tables

Oui, c'est bien la difficulté.
j'ai une base avec 129 tables et chaque table contient environ 20 champs.
je ne peut pas chercher un à un dans les tables l'information.
je cherche par exemple a determiner l'emplacement du champs "gare_bus", mais je ne connais ni la table, ni le champs.
une 2e question est aussi que le champ contenant l'enregistrement contient la chaine "projet".
Serait il possible de trouver ce champs dans la base sans regarder les tables une à une?

Merci

Hors ligne

#4 06/08/2010 17:11:29

Marc Cousin
Membre

Re : Recherche enregistrement dans toutes les tables

Pour déterminer dans quelle table se trouve un champ, allez regarder la vue information_schema.colums (très simple, une fois qu'on sait que cette vue existe…)

Pour l'autre question :

Je n'ai pas de méthode magique pour toutes les tables. Mais pour trouver directement dans une table oui. Voila un exemple :

marc=# CREATE TABLE test (a int, b varchar);
CREATE TABLE
marc=# INSERT INTO test values (1,'toto');
INSERT 0 1
marc=# INSERT INTO test values (2,'titi');
INSERT 0 1
marc=# SELECT * from test where test::text ~ 'tit';
a |  b   
---+------
2 | titi
(1 row)

Il ne vous reste plus qu'à faire une boucle. Ou un script qui génère une série de select * :

SELECT 'SELECT * FROM ' || tablename || ' WHERE ' || tablename || E'::text ~ \'titi\';' from pg_tables where schemaname='public';

Récupérez le script généré et exécutez le.


Marc.

Hors ligne

Pied de page des forums