Postgres-Postgis-FAQ

Aus Cismet Wiki

Wechseln zu: Navigation, Suche

Inhaltsverzeichnis

Erstellen einer Postgres Aggregationsfunktion

die bestehende Funktion array_accum kann jetzt als Aggregationsfunktion wie sum, oder max verwendet werden

CREATE AGGREGATE array_accum (
      sfunc = array_append,
      basetype = anyelement,
      stype = anyarray,
       initcond = '{}'
     );

Anwendung: dieses Statement Produziert eine Kommaseparierte Liste von Beschreibungen die über Group by gruppiert wurden. Hier: alle Beschreibungen zu einer tnr

SELECT tnr, array_to_string(array_accum(trim(descr)),',') AS description, 'EPSG:4326' AS crs , a7 AS ausdehnung         FROM 
 ( 
 SELECT tnr,a7, 'Bergisches Städtedreieck und größer' AS descr 
 FROM t_a7 WHERE a7=1 
 union 
 SELECT tnr, a7, 'Stadt Wuppertal' AS descr 
 FROM t_a7 WHERE a7=2 
 
 ) AS y 
 GROUP BY tnr,a7

Dumps

Dumps erzeugen

Mit dem Befehl:

pg_dump dbname > outfile

können SQL-Dumps erzeugt werden.

Dumps einspielen

Mit dem Befehl:

psql dbname < infile
psql -d database -f file

können dumps die mit dem vorherigen Befehl erzeugt wurden eingespielt werden.

Wie werden die Postgis-Geometrieindizes neu angelegt ?

SELECT update_geometry_stats();

Constraints zu einer Relation/Tabelle anzeigen

Zeigt die Constraints zu cs_class an

SELECT relname FROM pg_class WHERE oid IN ( SELECT indexrelid FROM pg_index, pg_class WHERE 
 pg_class.relname='cs_class' AND pg_class.oid=pg_index.indrelid AND ( indisunique = 't' OR indisprimary = 't' )
 );

Wie wird die Postgres Datenbank wieder frisch gemacht?

vacuum analyze;

Zugriff für PostgreSQL übers Netzwerk

Dieser Artikel beschreibt wie man PostgreSQL so konfiguriert, dass andere Rechner über das Netzwerk auf die Datenbank zugreifen können.

Konfiguration

  • Zuerst müssen in der Datei /usr/local/pgsql/data/postgresql.conf folgender Eintrag angepasst werden
 #listen_addresses = 'localhost'

zu

 listen_addresses = '*'
  • Dann muss in der Datei /usr/localhost/pgsql/data/pg_hba.conf der Eintrag:
 host	 all	 all	 192.168.100.0/24	 trust

hinzugefügt werden. 192.168.100.0/24 bedeutet das alle Rechner die mit der IP Adresse 192.168.100. beginnen darauf zugreifen können.

  • Nach den Anpassungen muss der Postmaster (der PosgreSQL Dienst) benachrichtigt werden das die Konfiguration sich geändert hat:
 pg_ctl reload

oder

 pg_ctl restart

Troubleshooting

Falls eine Verbindung immer noch nicht möglich ist sollte geprüft werden, ob auf dem Datenbankrechner eine Firewall aktiv. Falls dem so ist sollte der PostgreSQL Standardport 5432 freigegeben werden.

Links

Postgis Statements zu Geometrie Typen GeometryType

Zeige Geometrien eines bestimmten Typs an

SELECT geometryType(geo_field), geo_field FROM geom WHERE geometryType(geo_field)= 'GEOMETRYCOLLECTION'; 
SELECT geometryType(geo_field), geo_field FROM geom WHERE geometryType(geo_field)= 'MULTIPOLYGON';

Zeige welche Typen vorhanden sind

SELECT geometryType(geo_field), count(*) FROM geom GROUP BY geometryType(geo_field);

Postgres auf Latin9 umstellen bzw. encoding verändern

Umgebungsvariable client_encoding setzen, bevor man einen Dump erzeugt

export PGCLIENTENCODING=LATIN9

Datenbank createdb Parameter

createdb --encoding=latin9

Dumps falls falsch codiert, konvertieren (ascii->latin9) mit

iconv -f ISO-8859-1 -t ISO-8859-15 file

Encoding rausfinden, man kann die Tabelle auch updaten um das encoding zu verändern wenn noch keine daten drinn sind

select encoding from pg_database where datname='dbname'
psql -l :-)

Datenbank dropdb scheitert, weil Benutzer verbunden

Besteht noch eine Verbindung zur Datenbank, kann diese nicht gelöscht werden. Ist es aus irgendwelchen Gründen nicht möglich, die Verbindung normal zu beenden, kann mit Hilfe des folgenden Befehls der entsprechende Prozess abgebrochen werden:

pkill -f 'postgres: postgres <database>'

Sequenzen setzen

Am Beispiel einer Tabelle geom

SELECT SETVAL('GEOM_SEQ',(SELECT max(ID)+1 FROM GEOM));

Selects für alle Tabellen generieren:

SELECT 'select setval('''||table_name||'_seq'', (select max('||primary_key_field||')+1 from ' || table_name||'));' FROM cs_class;

Zu welcher DB bestehen gerade welche Connections?

ps -ef | grep postgres

Wie startet/stoppt man die Postgres DB?

pg_ctl start/stop
Persönliche Werkzeuge