[Gfoss] Problema (bug?) esportando da PG a SQLITE con ogr2ogr

Ciao

esportando una tabella fatta così:

         Colonna | Tipo | Modificatori
-------------------------+--------------------------+------------------------
id | integer | not null preimpostato
nextval('routing_arc_id_seq'::regclass)
geom | geometry | not null

con questo comando:

$ ogr2ogr -f SQLite -dsco SPATIALITE=yes myfile.sqlite PG:"host=localhost
dbname=miodb" routing_arc

ottengo un sqlite senza la colonna ID

se invece, provo con:

$ ogr2ogr -f SQLite -dsco SPATIALITE=yes myfile.sqlite PG:"host=localhost
dbname=miodb" -sql "select id, * from routing_arc"

ottengo un sqlite con la colonna ID ma con i valori ID tutti impostati a NULL

l'unico modo che ho trovato di fargli riempire correttamente l'id è:

$ ogr2ogr -f SQLite -dsco SPATIALITE=yes myfile.sqlite PG:"host=localhost
dbname=miodb" -sql "select id as gid, * from routing_arc"

curiosamente, con quest'ultimo comando mi trovo un sqlite con 2 colonne, ID e
GID entrambe compilate correttamente.

C'è qualche logica in questo comportamento o è un baco ?

Versioni:

$ apt-cache policy libspatialite2
libspatialite2:
  Installato: 2.4.0~rc4-2~lucid1

$ apt-cache policy libgdal1-1.7.0
libgdal1-1.7.0:
  Installato: 1.7.2-4~lucid3

$ apt-cache policy postgis
postgis:
  Installato: 1.5.1-3~lucid1

--
Alessandro Pasotti
itOpen - "Open Solutions for the Net Age"
w3: www.itopen.it
Linux User# 167502

Ciao Alessandro,

2010/9/24 Alessandro Pasotti <ale.pas@tiscali.it>

$ ogr2ogr -f SQLite -dsco SPATIALITE=yes myfile.sqlite PG:“host=localhost
dbname=miodb” routing_arc

ottengo un sqlite senza la colonna ID

La colonna ID (chiave primaria) viene rimpiazzata con la colonna OGC_FID,
colonna usata internamente per identificare le features.

se invece, provo con:

$ ogr2ogr -f SQLite -dsco SPATIALITE=yes myfile.sqlite PG:“host=localhost
dbname=miodb” -sql “select id, * from routing_arc”

ottengo un sqlite con la colonna ID ma con i valori ID tutti impostati a NULL

Usando la query invece, la colonna con chiave primaria non viene rimpiazzata.
Infatti la colonna OGC_FID viene compilata senza considerare la colonna ID
poiché la query che hai inserito potrebbe anche non contenere un campo univoco
tra quelli restituiti.

In questo caso quindi è come se avessi inserito 2 volte la colonna ID.
Forse a seguito di conflitto di nomi di colonna (in quanto ripetuti) viene lasciata
a NULL.

l’unico modo che ho trovato di fargli riempire correttamente l’id è:

$ ogr2ogr -f SQLite -dsco SPATIALITE=yes myfile.sqlite PG:“host=localhost
dbname=miodb” -sql “select id as gid, * from routing_arc”

curiosamente, con quest’ultimo comando mi trovo un sqlite con 2 colonne, ID e
GID entrambe compilate correttamente.

Ovviamente ti ritrovi il campo ID e quello GID, perché come ti dicevo sopra tutti
i campi vengono mantenuti usando una query come parametro.

C’è qualche logica in questo comportamento o è un baco ?

Sei arrivato vicinissimo alla soluzione :wink:

Prova questa:

$ ogr2ogr -f SQLite -dsco SPATIALITE=yes myfile.sqlite PG:“host=localhost
dbname=miodb” -sql “select * from routing_arc”

e tutto dovrebbe andare.

Saluti!!


Giuseppe Sucameli

In data venerdì 24 settembre 2010 11:39:05, Giuseppe Sucameli ha scritto:
: > Ciao Alessandro,

2010/9/24 Alessandro Pasotti <ale.pas@tiscali.it>

> $ ogr2ogr -f SQLite -dsco SPATIALITE=yes myfile.sqlite PG:"host=localhost
> dbname=miodb" routing_arc
>
> ottengo un sqlite senza la colonna ID

La colonna ID (chiave primaria) viene rimpiazzata con la colonna OGC_FID,
colonna usata internamente per identificare le features.

se invece, provo con:
> $ ogr2ogr -f SQLite -dsco SPATIALITE=yes myfile.sqlite PG:"host=localhost
> dbname=miodb" -sql "select id, * from routing_arc"
>
> ottengo un sqlite con la colonna ID ma con i valori ID tutti impostati a
> NULL

Usando la query invece, la colonna con chiave primaria non viene
rimpiazzata.
Infatti la colonna OGC_FID viene compilata senza considerare la colonna ID
poiché la query che hai inserito potrebbe anche non contenere un campo
univoco
tra quelli restituiti.

In questo caso quindi è come se avessi inserito 2 volte la colonna ID.
Forse a seguito di conflitto di nomi di colonna (in quanto ripetuti) viene
lasciata
a NULL.

l'unico modo che ho trovato di fargli riempire correttamente l'id è:
> $ ogr2ogr -f SQLite -dsco SPATIALITE=yes myfile.sqlite PG:"host=localhost
> dbname=miodb" -sql "select id as gid, * from routing_arc"
>
> curiosamente, con quest'ultimo comando mi trovo un sqlite con 2 colonne,
> ID e
> GID entrambe compilate correttamente.

Ovviamente ti ritrovi il campo ID e quello GID, perché come ti dicevo sopra
tutti
i campi vengono mantenuti usando una query come parametro.

C'è qualche logica in questo comportamento o è un baco ?

Sei arrivato vicinissimo alla soluzione :wink:
Prova questa:

$ ogr2ogr -f SQLite -dsco SPATIALITE=yes myfile.sqlite PG:"host=localhost
dbname=miodb" -sql "select * from routing_arc"

e tutto dovrebbe andare.

Perfetto!

Grazie.

--
Alessandro Pasotti
itOpen - "Open Solutions for the Net Age"
w3: www.itopen.it
Linux User# 167502