Benutzer-Werkzeuge

Webseiten-Werkzeuge


de:sysadmin:tools:postgres

Postgres Spickzettel

Verbindung aufnehmen …

psql

psql -ddatenbank -U user -h hostname

Befehle direkt ausführen mit ''-c''

psql -d template1 -c '\l'
psql -d template1 -c'select * from pg_stat_activity'

SQL-Statements aus einer Datei ausführen mit ''-f''

psql -d template1 -f create_testdatenbank.sql

Datei create_testdatenbank.sql:

CREATE DATABASE testdatenbank WITH OWNER=postgres ENCODING='UNICODE';

Basisinformation Schemas / Datenbank / Tabellen

Welche Schemata gibt es? Und sehe ich das richtige?

Was ist ein Schema?: Ein Schema ist im Prinzip ein Namensraum unterhalb einer Datenbank: Es enthält benannte Objekte (Tabellen, Datentypen, Funktionen und Operatoren), die die gleichen Namen haben können wie andere Objekte in anderen Schemas. Auf benannte Objekte wird zugegriffen, indem man entweder ihre Namen mit dem Schemanamen als Präfix „qualifiziert“ oder die gewünschten Schemas in den Suchpfad einfügt. 1)

Fehlen Tabellen, Datentypen, Funktionen oder Operatoren die eigentlich da sein sollten? Dann erst mal prüfen, ob das richtige Schema gerade im Suchpfad ist. 2)

postgres=# \dn
# \dn
         List of schemas
        Name        |    Owner
--------------------+-------------
 anderes_schema     | anderer_user
 public             | postgres

welches Schema verwende ich gerade?

show search_path ;

anderes schema verwenden

set search_path=anderes_schema;

Welche Datenbanken gibt es?

$ psql -l

oder \l im interaktiven Modus

$ psql
Welcome to psql 8.2.5, the PostgreSQL interactive terminal.

Type:  \copyright for distribution terms
       \h for help with SQL commands
       \? for help with psql commands
       \g or terminate with semicolon to execute query
       \q to quit

postgres=# \l        
List of databases
   Name    |  Owner   | Encoding
-----------+----------+----------
 meinedb   | postgres | UTF8
 postgres  | postgres | UTF8
 template0 | postgres | UTF8
 template1 | postgres | UTF8
(4 rows)

postgres=#

Welche Tabellen hat die Datenbank?

$psql -d meinedb
...
meinedb=# \dt
           List of relations
 Schema |   Name       | Type  |  Owner
--------+--------------+-------+----------
 public | tabellenname | table | postgres

Wie ist eine Tabelle aufgebaut?

meinedb=# \d tabellenname
              Table "public.tabellenname"
  Column  |          Type          | Modifiers
----------+------------------------+-----------
 id       | bigint                 | not null
 name     | character varying(200) | not null
 count    | bigint                 |

Indexes:
    "pk_tabellename" PRIMARY KEY, btree (id)

Kompliziertere Methode dort beschrieben: http://forums.devshed.com/postgresql-help-21/show-databases-show-tables-describe-table-38544.html#post160440

Welche Functions gibt es? Und wie sehen sie aus?

Zeige mir alle Funktionen:

\df

zeig mir den Code der Funktion func_tuwas:

\df+ func_tuwas

psql - Weitere Befehle

  • \H - von "Aligned" Ausgabe auf HTML-Ausgabe oder zurück umschalten
  • \dp - zeige alle Zugriffsprivilegien von Tabellen, Views und Sequenzen
  • \dF - zeige alle "Textsuchekonfigurationen" (List of text search configurations) 3)
    • \dF+ pg_catalog.german - ausführlicher für eine tsearch Konfiguration

Status der Datenbank

zeige alle bestehenden Verbindungen zur Datenbank:

select * from pg_stat_activity;

zeige die Datenbank-Verbindungen, die "IDLE in transaction sind" (wenn das viele sind, kann VACUUM nicht richtig arbeiten)

select * from pg_stat_activity where current_query='<IDLE> in transaction';

SQL-Sammlung

cross join:

select a.email,b.upper from
 (select email from mail_weiterleitung
  where email~'@example.org' and destination ~'storm.example.com')
 as a cross join (select * from upper('OK')) as b;

             email              | upper
--------------------------------+-------
 hauke.haien@example.org        | OK
 elke.volkerts@example.org      | OK
 ole.peters@example.org         | OK
 pole.poppenspaeler@example.org | OK
 lisei.paulsen@example.org      | OK
 joseph.tendler@example.org     | OK
 mutter.stine@example.org       | OK

INSERT in andere Tabelle mit CROSS JOIN:

insert into mail_empfangimmerlaubt (mailadresse,aktion,kommentar)
  select a.email,b.upper,c.lower from
    (select email from mail_weiterleitung where email~'@example.org'
     and destination ~'storm.example.com') as a
     cross join (select * from upper('OK')) as b
     cross join (select * from lower('2010-08-25 kommentar')) as c ;

Spickzettel ...

1) was ist ein Schema und wie baut man es: CREATE SCHEMA
2) Wenn man vom Schema-losen MySQL kommt, kann man da gerne darauf hereinfallen. Sonst auch manchmal … (Danke für den Hinweis, F.H.)
de/sysadmin/tools/postgres.txt · Zuletzt geändert: 2014-03-10 11:21 von hella

Seiten-Werkzeuge