postgresql | memorizzare data e ora di inserimento record

In PostgreSQL è possibile creare un campo (in una tabella) di tipo TIMESTAMP che viene aggiornato con data e ora corrente al momento dell’inserimento di un record.
Per fare ciò creare una colonna di tipo TIMESTAMP e impostare il valore di predefinito (DEFAULT) a “now()” che corrisponde a CURRENT_TIMESTAMP.

PostGIS | creare una colonna che contenga i centroidi del poligoni (di un layer poligonale)

Per prima cosa creare la colonna geometrica che conterrà le coordinate dei centroidi:

nome_database=# SELECT ADDGEOMETRYCOLUMN (‘public’,’nome_tabella’, ‘centroid’, ‘3003’, ‘POINT’,2);

dove:
public indica lo schema da usare nel database;
centroid è il nome del campo da creare;
3003 è il codice EPSG del sistema di reiferimento da usare;
2 indica le dimensioni spaziali.

Poi calcolare i centroidi e popolare il nuovo campo (colonna) creato:

nome_database=# UPDATE nome_tabella SET centroid=centroid(the_geom);

Per creare una VIEW con i centroidi:

nome_database=# CREATE VIEW centroidi AS SELECT nome_campo1.tabella_poligoni, nome_campo2.tabella_poligoni,nome_campo_i.tabella_poligoni, centroid(the_geom) FROM tabella_poligoni;

postgreSQL | campo come unione di 2 o più campi

Campo come somma di 2 o più campi
Per popolare il campo di una tabella con i valori ottenuti dall’unione di altri 2 (o più) campi:
nome_database=# UPDATE nome_tabella SET nome_campo=(nome_campo1 || ‘/’ || nome_campo2);
Il simbolo “||” indica l’UNIONE; in questo caso si è interposto anche il simbolo “/” fra i valori dei due campi.

Aggiornamento di un campo in base al valore dello stesso campo in un altra tabella
nome_database=# UPDATE nome_tabella1 SET nome_campo=nome_tabella2.nome_campo FROM nome_tabella2 WHERE nome_tabella1.nome_campo=nome_tabella2.nome_campo;

unione di più geometrie con PostGIS

Metodo utilizzato nel caso si vogliano unire più oggetti di uno stesso strato PostGIS (stessa tabella PotgreSQL) che hanno valori uguali di un certo campo. Es. unire tutte le aste fluviali denominate “Adige”.

Ho seguito questo splendido post di Paolo Corti per completare la procedura.

La tabella unione deve essere create a priori inserendo, in seconda battuta, anche una colonna per memorizzare le informazioni geometriche (the_geom). Nel nostro caso:

SELECT AddGeometryColumn(”,’nome_tabella_unione’,’the_geom’,’-1′,’MULTILINESTRING’,2);

E’ importante impostare lo SRID a “-1” altrimenti viene riportato un errore di constraints (enforce_srid); inoltre lo strato viene caricato in Qgis ma non viene visualizzato.

Infine popoliamo la nuova tabella unione con i dati:

INSERT INTO nome_tabella_unione (the_geom,nome_campo1) SELECT astext(multi(ST_Union(the_geom))) AS the_geom,nome_campo1 FROM nome_tabella_originale  GROUP BY nome_campo1;

MS Access come client di PostgreSQL

Seguire i passaggi indicati qui sotto:
– Scaricare i driver ODBC di PostgreSQL da qui.
– Prendere la versione più recente (Es. psqlodbc_08_03_0300.zip)
– Decomprimere il file
– Lanciare psqlodbc.msi
– Aprire MS Access e creare un nuovo DB vuoto
– Andare su File -> Carica dati esterni -> Collega tabelle….
– Sulla finestra che compare selezionare “ODBC Database()” nel menù in basso relativo a “Files of type”
– Clickare su “Nuovo…” e selezionare il driver “PostgreSQL Unicode”
– Dare un nome alla connessione
– Clickare su “Next” e su “Connection”: compare una finestra con 2 pagine (2 pulsanti).
In pagina 1 tenere spuntate soltanto le voci:
— “Disable Genetic Optimizer”;
— “KSQO(….)”
— Recognize Unique Indexes”
e mantenere il resto come impostato di default.
In pagina 2 spuntare “LF …” e “True is -1”; togliere la spunta da “updatable Cursors”
– Dare “OK”