<table cellspacing="0" cellpadding="0" border="0" ><tr><td valign="top" style="font: inherit;">Hi Oscar,<br><br>Unless I'm missing something here...<br><br>Can you 
open the array up in a query/view so the elements become columns for the
 web service? While an array is convenient within Postgres, it is a 
non-standard & not widely supported capability, as is the user 
defined composite data type.<br><br>It seems to me that while you may 
want to take advantage of these capabilities for data management, you 
should transform the structure into something more widely supported for 
interoperability purposes, so decompose the array into it's constituent 
fields for the web service. <br><br>I'm not sure if the view below will 
work as is, or if you would be better off explicitly casting the array 
fields to specified data types. <br> <br>Create a decomposed view which geoserver can access, like:<br><br>create view  view_files_split as select <br>id, <br>from_table,
 <br>with_id,<br>files[1] as file_name,<br>files[2] as file_description,<br>files[3] as file_url,<br>files[4] as file_type,<br>files[5] as file_size,<br>files[6] as file_updated<br>from <table>;<br><br>Then join this for geoserver as you were the array table, or create a view like the above which includes the join...<br><br>Brent Wood<br><br>--- On <b>Sun, 3/20/11, Stefan Keller <i><sfkeller@gmail.com></i></b> wrote:<br><blockquote style="border-left: 2px solid rgb(16, 16, 255); margin-left: 5px; padding-left: 5px;"><br>From: Stefan Keller <sfkeller@gmail.com><br>Subject: Re: [postgis-users] Publishing WMS from PostTGIS table with ARRAY type field<br>To: "̉scar Vidal Calbet" <oscarblo@gmail.com><br>Cc: "PostGIS Users Discussion" <postgis-users@postgis.refractions.net><br>Date: Sunday, March 20, 2011, 9:16 AM<br><br><div class="plainMail">Now I see.<br>But then I would use filetype helper functions like below.<br><br>Yours,
 S.<br><br>CREATE or REPLACE FUNCTION filetype_to_href(filetype)<br>RETURNS text AS $$<br>DECLARE<br>   file alias for $1;<br>   href text := '';<br>BEGIN<br>   RETURN '<a href="'|| file.file_url ||'" target="_blank" >'||<br>file.file_name ||'</a>';<br>END;<br>$$ LANGUAGE plpgsql;<br>-- Test: SELECT filetype_to_href(files[1]) FROM resource_file;<br><br>CREATE or REPLACE FUNCTION filetype_array_to_href(filetype[])<br>RETURNS text AS $$<br>DECLARE<br>   files alias for $1;<br>   href_list text := '';<br>BEGIN<br>   FOR n IN 1 .. array_upper($1, 1)<br>   LOOP<br>       href_list := href_list || filetype_to_href(files[n]) || ' ';<br>   END LOOP;<br>   RETURN href_list;<br>END;<br>$$ LANGUAGE plpgsql;<br>-- Test: SELECT id, filetype_array_to_href(files) FROM
 resource_file;<br><br><br><br><br>2011/3/19 ̉scar Vidal Calbet <<a ymailto="mailto:oscarblo@gmail.com" href="/mc/compose?to=oscarblo@gmail.com">oscarblo@gmail.com</a>>:<br>> Thanks Stefan.<br>><br>> I tried already, but is happening the same.<br>> Geoserver is only publishing the fields "gid, name, description,<br>> the_geom" but no the "files".<br>> "files" is a ARRAY field with elements of a TYPE created for me.<br>><br>> thanks,<br>> oscar<br>><br>> 2011/3/19 Stefan Keller <<a ymailto="mailto:sfkeller@gmail.com" href="/mc/compose?to=sfkeller@gmail.com">sfkeller@gmail.com</a>>:<br>>> Ok.<br>>><br>>> I think you can still turn your original view into one that is<br>>> recognized by GeoServer, like this:<br>>><br>>> CREATE VIEW view_my_point_feature_with_files<br>>>   AS SELECT gid, name, description, files, the_geom<br>>>      FROM
 my_feature, resource_file<br>>>      WHERE resource_file.from_table='my_point_feature'<br>>>      AND resource_file.with_id=gid;<br>>><br>>> I just added gid because I think GeoServer needs a numeric id.<br>>><br>>> Yours, S.<br>>><br>>> 2011/3/19 ̉scar Vidal Calbet <<a ymailto="mailto:oscarblo@gmail.com" href="/mc/compose?to=oscarblo@gmail.com">oscarblo@gmail.com</a>>:<br>>>> Hi Stefan,<br>>>><br>>>> Thanks for the answer. You are right, my explanation is somewhat confusing.<br>>>> I think is easier just post the following example code:<br>>>><br>>>> ===========================================<br>>>> --<br>>>> CREATE TYPE file AS (<br>>>>    file_name        varchar(64),<br>>>>    file_description varchar(256),<br>>>>  
  file_url         varchar(256),<br>>>>    file_type        varchar(32),<br>>>>    file_size        decimal,<br>>>>    file_updated     date<br>>>> );<br>>>> --<br>>>> CREATE TABLE resource_file<br>>>> (<br>>>>  id serial NOT NULL,<br>>>>  from_table varchar(32) NOT NULL,<br>>>>  with_id integer NOT NULL,<br>>>>  files file[],<br>>>>  CONSTRAINT resource_file_pkey PRIMARY KEY (id)<br>>>> );<br>>>> --<br>>>> INSERT INTO resource_file_test(id, from_table, with_id, files)<br>>>> VALUES (nextval('resource_file_id_seq'), 'my_point_feature', '54',<br>>>>                ARRAY[[row('my_file.pdf', 'test',<br>>>>
 '/where/is/the/file/my_file01.pdf', 'pdf', 1.5,<br>>>> statement_timestamp())::file],<br>>>>                            [row('my_file.jpg', 'test',<br>>>> '/where/is/the/file/my_file02.jpg', 'image', 1.5,<br>>>> statement_timestamp())::file]]);<br>>>> --<br>>>> CREATE VIEW view_my_point_feature_with_files<br>>>>    AS SELECT name, description, files, the_geom<br>>>>       FROM my_feature, resource_file<br>>>>       WHERE resource_file.from_table='my_point_feature' AND<br>>>> resource_file.with_id=gid<br>>>><br>>>> ===========================================<br>>>> Hope its clear now.<br>>>><br>>>> Stefan, I tried already the UNNEST() function<br>>>><br>>>>  SELECT name, description, files,
 unnest(the_geom)<br>>>><br>>>> But it is giving me back a one line per each file, my objective is<br>>>> receive N files in the same row.<br>>>><br>>>> I think my approach is wrong. That is because Im using objects ("TYPE<br>>>> file" and ARRAY) that are not supported like attributes of spatial<br>>>> entity, by the WMS or geoserver. This objects are not standards.<br>>>><br>>>> Right now Im making another New Approach, its not so elegant, but its working.<br>>>><br>>>> ===========================================<br>>>> --<br>>>> CREATE TYPE type_file AS ENUM ('PDF', 'IMAGE', 'VIDEO', 'GPX', 'ZIP');<br>>>> --<br>>>> CREATE TABLE resource_file<br>>>> (<br>>>>  id                     serial NOT NULL,<br>>>>  from_table    
    varchar(32) NOT NULL,<br>>>>  with_id                integer NOT NULL,<br>>>>  file_name         varchar(64)  NOT NULL,<br>>>>  file_description  varchar(256)  NOT NULL,<br>>>>  file_host           varchar(256)  NOT NULL,<br>>>>  file_path           varchar(256)  NOT NULL,<br>>>>  file_type           type_file  NOT NULL,<br>>>>  file_size              decimal  NOT NULL,<br>>>>  file_updated      date,<br>>>>  CONSTRAINT resource_file_pkey PRIMARY KEY (id)<br>>>> );<br>>>> --<br>>>> INSERT INTO resource_file(id, from_table, with_id, file_name,<br>>>>
 file_description, file_host, file_path, file_type, file_size,<br>>>> file_updated)<br>>>> VALUES (nextval('resource_file_id_seq'),'my_point_feature',54,<br>>>> 'file.pdf', 'teste',<br>>>> '<a href="http://localhost/%27,%27where/filesFTP/are/050334.pdf%27,%27PDF%27,1.5,statement_timestamp" target="_blank">http://localhost/','where/filesFTP/are/050334.pdf','PDF',1.5,statement_timestamp</a>());<br>>>> --<br>>>> INSERT INTO resource_file(id, from_table, with_id, file_name,<br>>>> file_description, file_host, file_path, file_type, file_size,<br>>>> file_updated)<br>>>> VALUES (nextval('resource_file_id_seq'),'my_point_feature',54,'file.jpg','teste',<br>>>> '<a href="http://localhost/%27" target="_blank">http://localhost/'</a>,<br>>>> 'where/filesFTP/are/050334.jpg','IMAGE',1.5,statement_timestamp());<br>>>> --<br>>>> CREATE or REPLACE FUNCTION
 getFilesHTML(text, int) RETURNS text AS $$<br>>>> DECLARE<br>>>>    _from_table alias for $1;<br>>>>    _with_id alias for $2;<br>>>>    r resource_file%rowtype;<br>>>>    HTML text := '';<br>>>>    url text := '';<br>>>>    description text := '';<br>>>> BEGIN<br>>>>    FOR r IN SELECT * FROM resource_file WHERE from_table =<br>>>> _from_table AND with_id = _with_id<br>>>>    LOOP<br>>>>        url := r.file_host || r.file_path;<br>>>>        description := r.file_description ||' ('|| r.file_updated ||')';<br>>>>        HTML:= HTML || '<a href="'|| url ||'" title="'|| description ||'"<br>>>> target="_blank" >'|| r.file_name ||'</a>';<br>>>>    END
 LOOP;<br>>>>    RETURN HTML;<br>>>> END;<br>>>> $$ LANGUAGE plpgsql;<br>>>> --<br>>>> CREATE VIEW view_my_point_feature_with_files<br>>>> AS SELECT name, description, getFilesHTML('my_point_feature', gid) as<br>>>> HTMLfiles, the_geom<br>>>> FROM my_point_feature;<br>>>> ===========================================<br>>>><br>>>> So, in one request, containing one row per feature, I can show/link the N files.<br>>>> The 'bad' thing, is that I'm mixing already the HTML with the data, in<br>>>> the database but I'm open to new suggestions/approaches.<br>>>><br>>>> Thanks!<br>>>> Oscar<br>>>><br>>>> 2011/3/19 Stefan Keller <<a ymailto="mailto:sfkeller@gmail.com" href="/mc/compose?to=sfkeller@gmail.com">sfkeller@gmail.com</a>>:<br>>>>> Hi
 Oscar<br>>>>><br>>>>> I don't understand what you really did.<br>>>>><br>>>>> 1. GeoServer can only serve tables with id and geometry.<br>>>>><br>>>>> 2. Can you specify the view you defined and the join?<br>>>>><br>>>>> To me that would work too (except that the geometry attribute is lacking):<br>>>>><br>>>>> CREATE VIEW resource_file_v(id, files) AS (<br>>>>>  SELECT id, unnest(files) AS files FROM resource_file<br>>>>> );<br>>>>><br>>>>> Yours, S.<br>>>>><br>>>>> 2011/3/15 ̉scar Vidal Calbet <<a ymailto="mailto:oscarblo@gmail.com" href="/mc/compose?to=oscarblo@gmail.com">oscarblo@gmail.com</a>>:<br>>>>>> Hey everyone,<br>>>>>><br>>>>>> I published some WMS services in Geoserver from PostGIS database and
 I<br>>>>>> need to make a GetFeaureInfo that gives me data from different tables,<br>>>>>> which can be solved by creating a VIEW. The problem is that I need<br>>>>>> that one of the fields in the VIEW be allowed to give me N entities<br>>>>>> referring to N files (strings with the path) related with the feature.<br>>>>>> To solve that in Postgres I created an ARRAY of  Composite Types in<br>>>>>> the table:<br>>>>>><br>>>>>> CREATE TYPE file AS (<br>>>>>><br>>>>>>    file_name        varchar(64),<br>>>>>><br>>>>>>    file_url         varchar(256),<br>>>>>><br>>>>>>    ...<br>>>>>>
 );<br>>>>>><br>>>>>><br>>>>>><br>>>>>> CREATE TABLE resource_file<br>>>>>><br>>>>>> (<br>>>>>><br>>>>>>  id serial NOT NULL,<br>>>>>><br>>>>>>  from_table varchar(32) NOT NULL,<br>>>>>><br>>>>>>  with_id integer NOT NULL,<br>>>>>><br>>>>>>  files ARRAY file,<br>>>>>><br>>>>>>  CONSTRAINT resource_file_pkey PRIMARY KEY (id)<br>>>>>><br>>>>>> )<br>>>>>><br>>>>>> So I'm creating a VIEW with the feature JOIN resource_file to get the<br>>>>>> info of the feature with all the (N) files associated. But when I'm<br>>>>>> publishing the VIEW, apparently there is no error but the ARRAY field<br>>>>>>
 is missing. I check in the OpenGIS® Web Map Server Implementation<br>>>>>> Specification<br>>>>>> , but I didn't find anything about if it can be done or not.<br>>>>>><br>>>>>> Is it possible?<br>>>>>> I would like to solve the problem by having only one request to the<br>>>>>> server to get the N files. Any suggestions?<br>>>>>> Maybe I can create a function in Postgres that builds already the<br>>>>>> content (a string with html tags) to show the N files and pass this to<br>>>>>> the view?<br>>>>>><br>>>>>> Thanks in advance!<br>>>>>> oscar<br>>>>>> _______________________________________________<br>>>>>> postgis-users mailing list<br>>>>>> <a ymailto="mailto:postgis-users@postgis.refractions.net"
 href="/mc/compose?to=postgis-users@postgis.refractions.net">postgis-users@postgis.refractions.net</a><br>>>>>> <a href="http://postgis.refractions.net/mailman/listinfo/postgis-users" target="_blank">http://postgis.refractions.net/mailman/listinfo/postgis-users</a><br>>>>>><br>>>>><br>>>><br>>><br>><br>_______________________________________________<br>postgis-users mailing list<br><a ymailto="mailto:postgis-users@postgis.refractions.net" href="/mc/compose?to=postgis-users@postgis.refractions.net">postgis-users@postgis.refractions.net</a><br><a href="http://postgis.refractions.net/mailman/listinfo/postgis-users" target="_blank">http://postgis.refractions.net/mailman/listinfo/postgis-users</a><br></div></blockquote></td></tr></table>