[Gfoss] ST_Union e PostGIS

a.furieri a lqt.it a.furieri a lqt.it
Mer 13 Dic 2017 12:54:23 CET


On Wed, 13 Dec 2017 12:13:37 +0100, Massimiliano Moraca wrote:
> Buongiorno,
> in QGIS con un virtual layer scrivendo questa query:
>
>> *SELECT ST_Union(geom) AS geometry, ogc_fid, cd_diparti, 
>> dipartimenFROM
>> dipartimentiGROUP BY cd_diparti;*
>
> Ottengo l'effetto dissolve che mi interessa(anche in SpatiaLite.
>
> La stessa query in PostGIS mi genera invece questo errore:
>
>> *ERROR: ERRORE: la colonna "dipartimenti.ogc_fid" deve comparire 
>> nella
>> clausola GROUP BY o essere usata in una funzione di aggregazioneLINE 
>> 3:
>> ogc_fid, ^SQL state: 42803Character: 39*
>

Massimiliano,

occhio ai dettagli, a volte sono assolutamente critici.
i due dialetti SQL supportati rispettivamente da PostgreSQL e da SQLite
si assomigliano, ma non sono affatto identici.

l'implementazione delle clausole GROUP BY e' uno dei punti in cui si 
nota
maggiormente la diversitra' tra i due: su SQLite e' decisamente 
flessibile
e molto pratica da usarsi, mentre su PostgreSQL e' molto piu' rigida e
pedante.

scendendo nei dettagli, SQLite non ti impone mai il vincolo per cui 
tutte
le colonne presenti nel dataset devono essere obbligatoriamente 
definite
nella GROUP BY oppure devono essere il risultato di una funzione di
aggregazione. Viceversa per PostgreSQL il vincolo e' stringente.

nota: inserire "ogc_fid" (che si suppone sia una PK) tra i risultati
senza citarlo nella GROUP BY non ha senso logico; SQLite accetta
tranquillamente questa condizione, ma poi scoprirai che nel
resultset di ritorno ci troverai semplicemente un valore pescato
a casaccio tra tutti quelli che presentano il medesimo valore
per "cd_diparti".

ciao Sandro


Maggiori informazioni sulla lista Gfoss