[QGIS-pt] qgis server e projectos no pgsql - cache?

Jorge Gustavo Rocha jgr at geomaster.pt
Tue Jun 16 14:41:03 PDT 2020


Olá Duarte,

Os projetos em base de dados têm que ter um tratamento ligeiramente
diferente. Porquê? Porque não há o mecanismo de inotify quando um
projeto é alterado. Ou seja, o QGIS Server sabe, para os projetos em
ficheiro, quando o mesmo é alterado. Nestes casos, o QGIS Server pode
reler o projeto e atualizar a cache do projeto.

Com os projetos em base de dados o QGIS Server não é notificado quando
são alterados. Por isso, uma forma de o QGIS Server reler o projeto é,
como fizeste, fazer o restart ao Apache manualmente.

Eu sou fã de guardar os projetos em base de dados, em ambientes
empresariais/multi-utilizador. Nestes casos, o que faço, é por um
trigger na(s) tabela(s) dos projetos QGIS que me envia uma notificação
sempre que um projeto é criado, alterado ou removido. Em Python, recebo
essa notificação e faço as ações decorrentes de cada uma destas coisas.

O trigger em si, é simples e pode ser algo do género:

create trigger project_change_qgis_projects
    after insert or delete or update on public.qgis_projects
    for each row
        execute procedure project_change();

A função que é executado é que envia a notificação:

CREATE OR REPLACE FUNCTION public.project_change() RETURNS trigger
LANGUAGE plpgsql AS $$
declare
    pname varchar;
    rec record;
begin
    if (TG_OP = 'DELETE') then
        pname = old.name;
        rec = old;
    else
        pname = new.name;
        rec = new;
    end if;
    perform pg_notify('qgis', FORMAT('{ "project": "%s", "operation":
"%s", "database": "%s", "schema": "%s", "username": "%s", "when": "%s"
}', pname, TG_OP, current_database(), current_schema(), current_user,
now() ) );
    return rec;
end
$$;

Depois, crio um processo que escuta as notificações 'qgis' e recebe os
parâmetros em JSON. No mínimo podes fazer um reload do Apache e assim
garantes que o projeto é relido pelo QGIS Server sempre que é alterado.

Espero que ajude.

Abraço e bom trabalho,

Jorge Gustavo

On 16/06/20 17:45, duartecarreira wrote:
> Olá mais uma vez pessoal!
>
> Ando aqui às voltas com o qgis server e estou muito bem impressionado!!
>
> A dúvida é: tendo um projecto em pgsql servido pelo qgis server, estou a ver
> sempre o mesmo mapa, mesmo quando altero o projecto e volto a gravar.
>
> Parece haver aqui uma cache no meio... para ver o mapa uso o browser
> diretamente, com um url getmap construído à mão. A cache do browser está
> off. É enviado o header Cache-Control: no-cache.
>
> Sabem o que se pode estar a passar? O cap doc tb não é actualizado... Posso
> adicionar um layer novo, gravar o projecto, e o cap docs não o vai incluir
> num request novo.
>
> Se fizer reload ao apache (estou a usar mod_fcgi), já aparece o projecto
> correctamente...
>
> Eu li algures que o qgis ou o qgis server fazem cache do cap doc. Se o qgis
> server faz isto tb, não vejo como possa ultrapassar este problema... a não
> ser desistir de projectos em bd.
>
>
> Abr,
> Duarte
>
>
>
> --
> Sent from: http://osgeo-org.1560.x6.nabble.com/QGIS-pt-f5128248.html
> _______________________________________________
> QGIS-pt mailing list
> QGIS-pt at lists.osgeo.org
> https://lists.osgeo.org/mailman/listinfo/qgis-pt
-- 
Email Signature
Logo <https://www.geomaster.pt> 	
*Geomaster*
*Jorge Gustavo Rocha* | Software Engineer
*e:*jgr at geomaster.pt | *m:*+351 910 333 888
*g:*41.54094,-8.40490 | *v: *510 906 109
*a: * Rua António Cândido Pinto, 67, 4715-400 Braga

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/qgis-pt/attachments/20200616/1af6ef24/attachment.html>


More information about the QGIS-pt mailing list