[QGIS-it-user] Copia-incolla da shapefile a layer Postgresql

Buongiorno lista,
ho la necessità di caricare periodicamente degli aggiornamenti di layer
Postgis a partire da shapefile. Per non dover ricostruire sempre la
struttura delle tabelle, dare i grant, fare le viste, ecc. preferirei
svuotare le tabelle e riempirle da zero, invece di cancellarle e reimportare
il layer.
Ho provato ad utilizzare il semplice copia-incolla, selezionando tutti i
48245 punti del mio shape e incollandolo sul layer postgis. La struttura
delle tabelle è di soli 2 campi, con nome identico. Però QGIS (ver. 3.4.6)
rimane appeso e ho dovuto chiudere il programma dopo più di 2 ore che
girava. Premetto che se faccio un test con pochi punti, funziona tutto a
perfezione.
Ho windows 10 con 4 Gb di RAM, ma comunque vedevo che non la prendeva tutta,
anzi si assestava su una percentuale abbastanza bassa. Anche di CPU ce n'era
ancora.
Ci sono forse delle funzioni più efficienti di tipo batch da usare che mi
consigliate?

Poi, eliminando il layer postgis e reimportandolo da zero, con l'importa
layer del DB Manager sono riuscita ad ottenere il risultato. Ci ha messo un
pò ma molto meno di prima. Però non è quello che vorrei, sia perché è
delicato ricostruire esattamente la struttura della tabella e gli elementi
collegati, sia perché vorrei delegare il caricamento dati ad utenti che non
hanno permessi di modifica della struttura dati.

Grazie,
Annalisa

--
Sent from: http://osgeo-org.1560.x6.nabble.com/QGIS-Italian-User-f5250612.html

Nessun suggerimento? :frowning: Dovrei caricare ora il layer dell'idrografia, con
51.679 linee!
Ho provato anche il comando PostGIS "shp2pgsql", con l'opzione -a append, ma
mi dà errore indicando che manca la dimensione M, ma in realtà sia origine
che destinazione sono a 3 dimensioni, con Z.

Sarebbe utile avere un comando simile al "Load data" di ArcGIS, nelle
vecchie versioni, con cui si potevano "mappare" i campi da origine e
destinazione (es. i miei shape spesso hanno nomi troncati rispetto alle
versioni PostGIS) e lanciare il caricamento con comando batch.

Grazie per qualsiasi suggerimento,
Annalisa

--
Sent from: http://osgeo-org.1560.x6.nabble.com/QGIS-Italian-User-f5250612.html

Salve,
non sono pratico con cmd, ma ho trovato qualcosa tramite GUI:

https://www.youtube.com/watch?v=xjOB7vbRqOY

https://www.postgresonline.com/journal/archives/145-PgAdmin-III-Plug-in-Registration-PostGIS-Shapefile-and-DBF-Loader.html

saluti!

-----
Falz
--
Sent from: http://osgeo-org.1560.x6.nabble.com/QGIS-Italian-User-f5250612.html

Grazie della risposta.
Proverò a vedere con la GUI, anche se l'articolo è un pò datato e ho PGAdmin
4 su web, ormai (ma il DB è su un server Ubuntu senza grafica, credo non ci
sia la GUI).
Mi spiace non ci sia uno strumento batch efficiente, dedicato al caricamento
di una tabella PostGIS vuota, su QGIS.

Annalisa

--
Sent from: http://osgeo-org.1560.x6.nabble.com/QGIS-Italian-User-f5250612.html

Ciao, allora ti do due risposte.

shp2pgsql è secondo me quello che fa per te ti basta aggiungere il flag " -t Force geometry to be one of ‘2D’, ‘3DZ’, ‘3DM’, or ‘4D’" ossia scrivere nello script -t 2D e l’errore che ti da dovrebbe andare a posto. Questo perchè gli forzi la geometria in 2d (chiaramente se hai un dato 3d perdi l’informazione della terza dimensione.

Volendo ci sono anche flag per forzare la multigeometria che possono essere utili

Un altra opzione che non necessita di permessi particolari da dare sul db è gdal ogr2ogr. Puoi fare un append alla tabella o fargliene creare una nuova. il concetto è molto simile a shp2pgsql ma gestisce una miriade di formati diversi. Lo lanci dalla shell di OSGEO.

Ciao
Sergio

···

Sergio Gollino
Profilo su Linkedin

Questo messaggio, comprensivo di eventuali allegati, è ad uso esclusivo del destinatario e potrebbe contenere informazioni riservate; se è stato recapitato per errore ci scusiamo per l’accaduto e Vi invitiamo cortesemente a darcene notizia provvedendo alla sua distruzione.

Vi ricordiamo che la diffusione, l’utilizzo e/o la conservazione dei dati ricevuti per errore costituiscono violazione alle disposizioni del D.Lgs. n. 196/2003 “Codice in materia di protezione dei dati personali”.

Grazie mille!
Non avevo trovato il flag -t e in effetti c’era un problema nei miei dati, perché lo shape di partenza, dalle proprietà di QGIS, leggo che è “Line (LineString25D)” … non so bene che significhi! Invece la geom della tabella Postgis “ricevente” è Line (MultiLineString) in 2 dimensioni. Quindi mi è molto utile il flag per forzare la dimensionalità (non mi serve la tridimensionalità).

Grazie anche dell’altro comando, lo proverò.

Nel frattempo ho risolto importando lo shape nel DB, cambiando però prima la dimensione in 2D, e poi lanciando un comando SQL insert dall’interfaccia DB Manager, in modo da mappare le colonne tra la tabella “grezza” identica allo shape e la tabella finale. Salvando l’SQL posso rilanciare più volte il caricamento, quindi mi servirà anche in futuro.
Sia l’import dello shape che l’esecuzione del comando SQL sono abbastanza veloci ed efficienti.

Ciao,

···

Annalisa