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 21/05/2014 10:22:59

Sadewizz
Membre

Fonction permettant de récupérer l'id et la géométrie de mes tables

Fonction permettant de récupérer l'id et la géométrie de mes tables

Bonjour,

Je suis nouveau sur le site. J'espere pouvoir trouver un peu d'aide ici.
J'ai un petit problème avec une fonction :

CREATE OR REPLACE FUNCTION test3(OUT nom_table text, OUT id_table text, OUT table_geometry geometry ) RETURNS SETOF record
LANGUAGE plpgsql
AS
$BODY$
DECLARE
  tables record;
BEGIN
  FOR tables IN SELECT tablename FROM pg_tables where tablename 
		 IN 
		(
		(SELECT f_table_name FROM geometry_columns where f_table_name not like 'box_%' and f_table_name not like 'rast%') 
                 UNION (SELECT 'spatial_ref_sys') UNION (select f_geometry_column from geometry_columns where f_geometry_column not like 'the_geom_wgs84')
		) 
	AND pg_tables.schemaname='france'  
  LOOP
    nom_table := tables.tablename;
    EXECUTE 'SELECT id FROM '|| quote_ident(tables.tablename)
      INTO id_table;
    EXECUTE 'SELECT the_geom_wgs84 FROM ' || quote_ident(tables.tablename)
      INTO table_geometry;
    RETURN NEXT;
  END LOOP;
END
$BODY$;

Cette fonction me renvoie comme résultat, un tableau contenant le nom de ma donnée, un id pris au hasard (je suppose ?) et une ligne géométrique.
Cependant, impossible de visualiser çà dans un client carto.
Ce que je voudrais c'est pouvoir récupérer chaque ligne de mes tables en fonction de leurs id (qui est unique) et leurs coordonnées géométriques.
Tout d'abord, est ce possible ?

Merci d'avance pour d'éventuelle réponse.
S.

Hors ligne

#2 21/05/2014 11:19:14

Géronimo
Membre

Re : Fonction permettant de récupérer l'id et la géométrie de mes tables

Salut Sadewizz,

Voici la requête permettant de créer la numérotation des lignes de ta table :

SELECT row_number()OVER()::integer AS gid

Je pense qu'il faut que tu l'insères comme suit :

    EXECUTE 'SELECT row_number()OVER()::integer AS id_table' || quote_ident(tables.tablename)
      INTO id_table; 

Je ne suis pas sûr que le quote_ident(tables.tablename) soit nécessaire dans ce cas-là.

Bon, après je suis débutant comme toi et je ne m'y connais pas encore parfaitement...

Hors ligne

#3 21/05/2014 13:13:05

Sadewizz
Membre

Re : Fonction permettant de récupérer l'id et la géométrie de mes tables

Salut Géronimo,

Merci pour ta réponse. Cependant le résultat obtenu avec Row_number ne me numérote que les lignes des tables dont les id ont été extraient. Comme il ne m'extrait qu'une seule ligne par table me met 1 à chaque ligne.
Enfin pour ma part il me semble que ce soit çà...
En tout cas merci pour ton aide. Je continue de chercher et apporterais une solution si toutefois j'en trouve une.
Mais si quelqu'un à deux ou trois pistes, je suis preneur wink

Bonne après midi!!

Hors ligne

Pied de page des forums