Vous n'êtes pas identifié(e).
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
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
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
Bonne après midi!!
Hors ligne