datenbank:postgresql
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende Überarbeitung | ||
| datenbank:postgresql [2025-08-09 17:32:16] – [Anleitungen bzw. Beispiele] manfred | datenbank:postgresql [2026-05-15 10:46:00] (aktuell) – manfred | ||
|---|---|---|---|
| Zeile 1: | Zeile 1: | ||
| + | ====== PostgreSQL ====== | ||
| + | |||
| + | * [[http:// | ||
| + | * **[[https:// | ||
| + | * [[http:// | ||
| + | * [[https:// | ||
| + | * [[http:// | ||
| + | |||
| + | Seit '' | ||
| + | |||
| + | * [[http:// | ||
| + | * [[http:// | ||
| + | |||
| + | * **[[http:// | ||
| + | * **[[http:// | ||
| + | * [[http:// | ||
| + | * {{:: | ||
| + | * [[http:// | ||
| + | * **[[http:// | ||
| + | |||
| + | |||
| + | |||
| + | ===== Anleitungen bzw. Beispiele ===== | ||
| + | |||
| + | * **[[:: | ||
| + | * **[[:: | ||
| + | * **[[:: | ||
| + | * [[:: | ||
| + | * [[:: | ||
| + | * [[:: | ||
| + | * [[:: | ||
| + | * [[:: | ||
| + | |||
| + | passwortloser login mit '' | ||
| + | > touch ~/.pgpass | ||
| + | > chmod 0600 ~/.pgpass | ||
| + | > vi ~/.pgpass | ||
| + | hostname: | ||
| + | | ||
| + | > vi ~/.bashrc | ||
| + | PGPASSFILE=" | ||
| + | | ||
| + | > echo " | ||
| + | |||
| + | individuelle Konfiguration mit '' | ||
| + | > echo " | ||
| + | |||
| + | > echo ' | ||
| + | > echo '\c postgresql:// | ||
| + | |||
| + | PG-User ändert sein eigenes Passwort: | ||
| + | > psql -U dbuser -d dbname | ||
| + | dbname=> \password | ||
| + | Enter new password for user " | ||
| + | Enter it again: | ||
| + | dbname=> quit | ||
| + | |||
| + | '' | ||
| + | > echo " | ||
| + | |||
| + | '' | ||
| + | > psql -U postgres -l | ||
| + | > echo -e " | ||
| + | |||
| + | '' | ||
| + | > echo " | ||
| + | > echo " | ||
| + | |||
| + | '' | ||
| + | > echo "echo " | ||
| + | |||
| + | '' | ||
| + | > echo " | ||
| + | |||
| + | '' | ||
| + | > echo " | ||
| + | |||
| + | '' | ||
| + | > echo " | ||
| + | |||
| + | Tabellenstruktur anzeigen: | ||
| + | > echo "\d+ tabellenname" | ||
| + | |||
| + | soll die '' | ||
| + | > echo " | ||
| + | |||
| + | '' | ||
| + | > pg_dump --schema-only -U username -d database -t tabellenname | ||
| + | |||
| + | '' | ||
| + | > ALTER TABLE tabellenname ADD PRIMARY KEY(spalte1, | ||
| + | |||
| + | '' | ||
| + | > echo "DROP TABLE tabellenname;" | ||
| + | |||
| + | '' | ||
| + | > echo " | ||
| + | > echo " | ||
| + | |||
| + | |||
| + | ==== Netzwerkzugriffe erlauben ==== | ||
| + | |||
| + | <code bash Zugriffe aus allen Netzen erlauben> | ||
| + | > echo " | ||
| + | > echo " | ||
| + | > echo " | ||
| + | </ | ||
| + | |||
| + | <code bash neue CFG laden> | ||
| + | > service postgresql reload | ||
| + | </ | ||
| + | |||
| + | <code bash offene DB-Ports zeigen> | ||
| + | > ss -antp | grep -F LISTEN | grep -F postgres | ||
| + | LISTEN | ||
| + | LISTEN | ||
| + | </ | ||
| + | |||
| + | |||
| + | ==== Benutzer anlegen ==== | ||
| + | |||
| + | <code bash DB-Benutzer anzeigen> | ||
| + | > echo ' | ||
| + | List of roles | ||
| + | Role name | | ||
| + | -----------+------------------------------------------------------------ | ||
| + | | ||
| + | </ | ||
| + | |||
| + | <code bash Datenbanken anzeigen> | ||
| + | > echo ' | ||
| + | List of databases | ||
| + | | ||
| + | -----------+----------+----------+-----------------+---------+---------+------------+-----------+----------------------- | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | (3 rows) | ||
| + | </ | ||
| + | |||
| + | |||
| + | === Benutzer mit allen Rechten, jedoch ohne Benutzer anlegen oder verändern zu können === | ||
| + | |||
| + | <code sql> | ||
| + | # Benutzer anlegen | ||
| + | CREATE ROLE dbadmin | ||
| + | LOGIN | ||
| + | CREATEDB | ||
| + | PASSWORD ' | ||
| + | |||
| + | # nicht! zuviele Rechte | ||
| + | #ALTER ROLE dbadmin CREATEROLE; | ||
| + | #ALTER ROLE dbadmin SUPERUSER; | ||
| + | |||
| + | # Rechte für eine Datenbank | ||
| + | GRANT CONNECT ON DATABASE deine_datenbank TO dbadmin; | ||
| + | GRANT USAGE, CREATE ON SCHEMA public TO dbadmin; | ||
| + | |||
| + | # Rechte auf eine bestimmte Tabelle erteilen | ||
| + | GRANT SELECT, INSERT, UPDATE, DELETE, REFERENCES, TRIGGER ON TABLE deine_tabelle TO dbadmin; | ||
| + | |||
| + | # Rechte auf alle vorhandenen Tabellen in " | ||
| + | GRANT SELECT, INSERT, UPDATE, DELETE, REFERENCES, TRIGGER ON ALL TABLES IN SCHEMA public TO dbadmin; | ||
| + | |||
| + | # Rechte auf alle neuen Tabellen in " | ||
| + | ALTER DEFAULT PRIVILEGES IN SCHEMA public | ||
| + | GRANT SELECT, INSERT, UPDATE, DELETE, REFERENCES, TRIGGER | ||
| + | ON TABLES | ||
| + | TO dbadmin; | ||
| + | |||
| + | # (Optional) Rechte auf Sequences (IDs!) | ||
| + | GRANT USAGE, SELECT ON ALL SEQUENCES IN SCHEMA public TO dbadmin; | ||
| + | ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT USAGE, SELECT ON SEQUENCES TO dbadmin; | ||
| + | </ | ||
| + | |||
| + | |||
| + | === Benutzer mit reduzierten Rechten, kann nicht einmal Datenbanken anlegen === | ||
| + | |||
| + | <code sql> | ||
| + | # Benutzer anlegen | ||
| + | CREATE ROLE dbuser | ||
| + | LOGIN | ||
| + | PASSWORD ' | ||
| + | |||
| + | # Rechte für eine Datenbank | ||
| + | GRANT CONNECT ON DATABASE deine_datenbank TO dbuser; | ||
| + | GRANT USAGE, CREATE ON SCHEMA public TO dbuser; | ||
| + | |||
| + | # Rechte auf eine bestimmte Tabelle erteilen | ||
| + | GRANT SELECT, INSERT, UPDATE, DELETE, REFERENCES, TRIGGER ON TABLE deine_tabelle TO dbuser; | ||
| + | |||
| + | # Rechte auf alle vorhandenen Tabellen in " | ||
| + | GRANT SELECT, INSERT, UPDATE, DELETE, REFERENCES, TRIGGER ON ALL TABLES IN SCHEMA public TO dbuser; | ||
| + | |||
| + | # Rechte auf alle neuen Tabellen in " | ||
| + | ALTER DEFAULT PRIVILEGES IN SCHEMA public | ||
| + | GRANT SELECT, INSERT, UPDATE, DELETE, REFERENCES, TRIGGER | ||
| + | ON TABLES | ||
| + | TO dbuser; | ||
| + | </ | ||
| + | |||
| + | |||
| + | === Test-DB + Test-Tabelle anlegen === | ||
| + | |||
| + | <code bash> | ||
| + | > echo " | ||
| + | Password: | ||
| + | CREATE DATABASE | ||
| + | |||
| + | > echo "GRANT CONNECT ON DATABASE testdb TO dbuser;" | ||
| + | > echo "GRANT USAGE, CREATE ON SCHEMA public TO dbuser;" | ||
| + | > echo "GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO dbuser;" | ||
| + | > echo "ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO dbuser;" | ||
| + | > echo "GRANT USAGE, SELECT ON ALL SEQUENCES IN SCHEMA public TO dbuser;" | ||
| + | > echo "ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT USAGE, SELECT ON SEQUENCES TO dbuser;" | ||
| + | |||
| + | > echo -e ' | ||
| + | List of roles | ||
| + | Role name | | ||
| + | -----------+------------------------------------------------------------ | ||
| + | | ||
| + | | ||
| + | | ||
| + | |||
| + | List of databases | ||
| + | | ||
| + | -----------+----------+----------+-----------------+---------+---------+------------+-----------+----------------------- | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | (4 rows) | ||
| + | |||
| + | |||
| + | > echo ' | ||
| + | Password: | ||
| + | CREATE TABLE | ||
| + | |||
| + | > echo ' | ||
| + | Password: | ||
| + | List of relations | ||
| + | | ||
| + | --------+---------+-------+-------- | ||
| + | | ||
| + | (1 row) | ||
| + | |||
| + | > echo " | ||
| + | Password: | ||
| + | INSERT 0 1 | ||
| + | |||
| + | > echo " | ||
| + | Password: | ||
| + | id | code | ||
| + | ----+------ | ||
| + | 1 | ABC | ||
| + | (1 row) | ||
| + | </ | ||
| + | |||
| + | |||
| + | ==== TEMP TABLE ==== | ||
| + | |||
| + | DROP TABLE IF EXISTS TmpTabNamen; | ||
| + | BEGIN TRANSACTION; | ||
| + | CREATE TEMP TABLE TmpTabNamen AS SELECT ... FROM TabNamen WHERE ...; | ||
| + | COMMIT; | ||
| + | | ||
| + | SELECT * FROM TmpTabNamen WHERE ...; | ||
| + | DROP TABLE IF EXISTS TmpTabNamen; | ||
| + | |||
| + | |||
| + | ===== PostgreSQL 12 auf Debian 11 installieren ===== | ||
| + | |||
| + | Repository einrichten | ||
| + | > apt update && apt -y full-upgrade | ||
| + | > wget --quiet -O - https:// | ||
| + | > apt -y install gnupg2 | ||
| + | > echo "deb http:// | ||
| + | > apt update | ||
| + | |||
| + | den Postgresql-Client installieren | ||
| + | > apt install postgresql-client-12 | ||
| + | |||
| + | den Postgresql-Server (incl. Client) installieren | ||
| + | > apt install postgresql-12 | ||
| + | |||
| + | |||
| + | ===== PostgreSQL-Wartung ===== | ||
| + | |||
| + | Werkzeug für die PostgreSQL-Leistungsüberwachung, | ||
| + | [root@freebsd12 ~]# cd / | ||
| + | [root@freebsd12 ~]# cd / | ||
| + | | ||
| + | [root@freebsd12 ~]# touch ~/.pgtop | ||
| + | [root@freebsd12 ~]# chmod 0600 ~/.pgtop | ||
| + | [root@freebsd12 ~]# vi ~/.pgtop | ||
| + | user=postgres | ||
| + | pass= | ||
| + | host=localhost | ||
| + | port=5432 | ||
| + | db=test | ||
| + | | ||
| + | [root@erde ~]# su - postgres -c "echo ' | ||
| + | CREATE DATABASE | ||
| + | | ||
| + | [root@erde ~]# su - postgres -c "echo ' | ||
| + | List of databases | ||
| + | Name | Owner | Encoding | Collate | Ctype | | ||
| + | ----------------+----------+----------+---------+-------------+----------------------- | ||
| + | ... | ||
| + | | ||
| + | ... | ||
| + | | ||
| + | [root@freebsd12 ~]# pgtop | ||
| + | |||
| + | Manueller Aufruf für die DB-Wartung, gelöschte Bereiche wieder frei zugeben. | ||
| + | |||
| + | __eine einzelne DB:__ | ||
| + | [root@freebsd12 ~]# su - postgres -c "echo ' | ||
| + | ... | ||
| + | ... | ||
| + | ... | ||
| + | VACUUM | ||
| + | |||
| + | __alle DBs:__ | ||
| + | [root@freebsd12 ~]# su - postgres -c " | ||
| + | SELECT pg_catalog.set_config(' | ||
| + | SELECT datname FROM pg_database WHERE datallowconn ORDER BY 1; | ||
| + | SELECT pg_catalog.set_config(' | ||
| + | vacuumdb: vacuuming database " | ||
| + | VACUUM (FULL, ANALYZE); | ||
| + | SELECT pg_catalog.set_config(' | ||
| + | vacuumdb: vacuuming database " | ||
| + | VACUUM (FULL, ANALYZE); | ||
| + | |||
| + | |||
| + | ==== PostgreSQL-Datenbank bläht sich auf ==== | ||
| + | |||
| + | [[https:// | ||
| + | |||
| + | Das Aktualisieren eines vorhandenen Datensatzes führt zu einem toten Tupel, der vorherigen Version des Datensatzes sowie einem neuen Datensatz. Wenn die Rate der erstellten toten Tupel die Fähigkeit der Datenbank überschreitet, | ||
| + | Stellen wir uns ein Szenario vor, in dem eine Anwendung Datensätze mit durchschnittlich 1.000 Datensätzen pro Sekunde aktualisiert oder löscht und der __Autovacuum-Daemon__ tote Tupel mit einer durchschnittlichen Rate von 800 pro Sekunde entfernt. Jede Sekunde treten 200 Tupel Blähungen auf. | ||
| + | //Beachten Sie, dass dies ein hypothetisches Szenario ist. Es ist nicht möglich, den Autovakuum-Daemon so einzustellen, | ||
| + | |||
| + | __Autovacuum-Daemon__ aktivieren: | ||
| + | > vi / | ||
| + | | ||
| + | > cp / | ||
| + | > vi / | ||
| + | ... | ||
| + | track_counts = on | ||
| + | ... | ||
| + | autovacuum = on | ||
| + | ... | ||
| + | |||
| + | |||
| + | ===== erste Schritte in PostgreSQL ===== | ||
| + | |||
| + | Übrigens! [[https:// | ||
| + | |||
| + | ein Backup einer Datenbank anlegen: | ||
| + | pg_dump -d filme -f postgres_backup_-_filme.sql | ||
| + | |||
| + | einen Benutzer " | ||
| + | createuser -U postgres --no-superuser --no-createdb --no-createrole indy | ||
| + | echo " | ||
| + | |||
| + | einem DB-Benutzer Rechte über eine ganze DB erteilen: | ||
| + | echo "GRANT INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO indy;" | psql -d filme | ||
| + | |||
| + | einem DB-Benutzer Rechte über eine Tabelle erteilen: | ||
| + | echo "GRANT INSERT, UPDATE, DELETE ON TABLE tabellenname TO indy;" | psql -d filme | ||
| + | |||
| + | einen Benutzer löschen: | ||
| + | echo "DROP USER indy;" | psql | ||
| + | |||
| + | ein Datenbank-Backup in ein leeres DBMS einspielen: | ||
| + | echo " | ||
| + | psql -d filme -f postgres_backup_-_filme.sql | ||
| + | |||
| + | alle Datenbanken anzeigen: | ||
| + | echo " | ||
| + | |||
| + | alle Tabellen aus einer Datenbank anzeigen: | ||
| + | echo " | ||
| + | |||
| + | Anzeigen der Struktur einer bestimmten Tabelle: | ||
| + | echo "\d table_name" | ||
| + | |||
| + | eine Tabelle löschen: | ||
| + | echo "DROP TABLE table_name;" | ||
| + | |||
| + | eine DB löschen: | ||
| + | echo "DROP DATABASE database_name;" | ||
| + | |||
| + | Indexe anzeigen: \di | ||
| + | Fremdschlüssel anzeigen: \dfk | ||
| + | VIEWs anzeigen: \dv | ||
| + | Funktionen anzeigen: \df | ||
| + | |||
| + | psql postgres -l | ||
| + | echo " | ||
| + | |||
| + | echo " | ||
| + | |||
| + | |||
| + | * [[http:// | ||
| + | * [[https:// | ||
| + | |||
| + | //MySQL:// '' | ||
| + | SELECT * FROM pg_stat_activity; | ||
| + | |||
| + | |||
| + | ==== 1. Benutzer in PostgreSQL anlegen ==== | ||
| + | |||
| + | * [[http:// | ||
| + | * [[http:// | ||
| + | * [[http:// | ||
| + | |||
| + | zum PostgreSQL-root-User werden: | ||
| + | > su - postgres | ||
| + | |||
| + | User anlegen: | ||
| + | $ createuser fritz | ||
| + | |||
| + | wieder ausloggen und wieder " | ||
| + | $ exit | ||
| + | |||
| + | User anzeigen: | ||
| + | > echo " | ||
| + | Liste der Rollen | ||
| + | | ||
| + | ------------+-----------------------------------------------------------------+-------------- | ||
| + | | ||
| + | | ||
| + | |||
| + | |||
| + | ==== 2. Benutzer in PostgreSQL anlegen ==== | ||
| + | |||
| + | zum PostgreSQL-root-User werden: | ||
| + | > su - postgres | ||
| + | |||
| + | Syntax anzeigen: | ||
| + | $ echo "\h CREATE USER;" | psql postgres | ||
| + | Anweisung: | ||
| + | Beschreibung: | ||
| + | Syntax: | ||
| + | CREATE USER Name [ [ WITH ] Option [ ... ] ] | ||
| + | | ||
| + | wobei Option Folgendes sein kann: | ||
| + | | ||
| + | SUPERUSER | NOSUPERUSER | ||
| + | | CREATEDB | NOCREATEDB | ||
| + | | CREATEROLE | NOCREATEROLE | ||
| + | | CREATEUSER | NOCREATEUSER | ||
| + | | INHERIT | NOINHERIT | ||
| + | | LOGIN | NOLOGIN | ||
| + | | REPLICATION | NOREPLICATION | ||
| + | | BYPASSRLS | NOBYPASSRLS | ||
| + | | CONNECTION LIMIT Verbindungslimit | ||
| + | | [ ENCRYPTED | UNENCRYPTED ] PASSWORD ' | ||
| + | | VALID UNTIL ' | ||
| + | | IN ROLE Rollenname [, ...] | ||
| + | | IN GROUP Rollenname [, ...] | ||
| + | | ROLE Rollenname [, ...] | ||
| + | | ADMIN Rollenname [, ...] | ||
| + | | USER Rollenname [, ...] | ||
| + | | SYSID Uid | ||
| + | |||
| + | User anlegen: | ||
| + | $ echo " | ||
| + | $ echo " | ||
| + | |||
| + | Passwort ändern: | ||
| + | $ echo "ALTER USER fritz WITH PASSWORD ' | ||
| + | |||
| + | fritz alle Privilegien nehmen: | ||
| + | $ echo " | ||
| + | |||
| + | allen Usern alle Privilegien nehmen: | ||
| + | $ echo " | ||
| + | |||
| + | User löschen | ||
| + | $ echo "DROP USER fritz;" | ||
| + | |||
| + | User anlegen: | ||
| + | $ echo " | ||
| + | |||
| + | wieder ausloggen und wieder " | ||
| + | $ exit | ||
| + | |||
| + | User anzeigen: | ||
| + | > echo " | ||
| + | Liste der Rollen | ||
| + | | ||
| + | ------------+-----------------------------------------------------------------+-------------- | ||
| + | | ||
| + | | ||
| + | | ||
| + | > echo " | ||
| + | Liste der Rollen | ||
| + | | ||
| + | ------------+-----------------------------------------------------------------+-------------- | ||
| + | | ||
| + | | ||
| + | |||
| + | |||
| + | > echo "ALTER USER fritz RESET tabellen_name;" | ||
| + | > echo "GRANT UPDATE ON tabellen_name TO fritz;" | ||
| + | > echo " | ||
| + | > echo " | ||
| + | > echo " | ||
| + | |||
| + | |||
| + | ==== PostgreSQL-Hilfe ==== | ||
| + | |||
| + | Datenbanken auflisten: | ||
| + | > echo " | ||
| + | Liste der Datenbanken | ||
| + | | ||
| + | -----------+------------+-----------+--------------+-------------+----------------------- | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | (3 Zeilen) | ||
| + | |||
| + | Tabellen auflisten: | ||
| + | > echo " | ||
| + | |||
| + | Zugriffsprivilegien für Tabellen, Sichten und Sequenzen auflisten | ||
| + | > echo " | ||
| + | |||
| + | alle Konfigurationsparameter anzeigen: | ||
| + | > echo "SHOW ALL;" | psql postgres | ||
| + | |||
| + | Hilfe: | ||
| + | > psql --help | ||
| + | > echo " | ||
| + | > echo " | ||
| + | ... | ||
| + | Hilfe | ||
| + | \? [commands] | ||
| + | \? options | ||
| + | \? variables | ||
| + | \h [NAME] | ||
| + | ... | ||
| + | |||
| + | Verbindungen anzeigen: | ||
| + | > echo " | ||
| + | Sie sind verbunden mit der Datenbank " | ||
| + | |||
| + | |||
| + | ==== Datenbank in PostgreSQL anlegen ==== | ||
| + | |||
| + | Datenbank anlegen: | ||
| + | > createdb dbname | ||
| + | |||
| + | oder so | ||
| + | > echo " | ||
| + | CREATE DATABASE | ||
| + | |||
| + | neue DB anzeigen: | ||
| + | > echo " | ||
| + | Liste der Datenbanken | ||
| + | | ||
| + | -----------+------------+-----------+--------------+-------------+--------------------- | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | (4 Zeilen) | ||
| + | |||
| + | Backup erstellen: | ||
| + | > pg_dump dbname > dbname.pgdump | ||
| + | |||
| + | Backup zurück spielen: | ||
| + | > cat dbname.pgdump | psql dbname | ||
| + | |||
| + | |||
| + | ==== Tabelle in PostgreSQL anlegen ==== | ||
| + | |||
| + | Tabelle anlegen: | ||
| + | > echo " | ||
| + | |||
| + | Index (name_idx) in der Tabelle (film) auf eine Spalte (Name) angelegt: | ||
| + | > echo " | ||
| + | CREATE INDEX | ||
| + | |||
| + | Tabelle löschen: | ||
| + | > echo "DROP TABLE film;" | psql dbname | ||
| + | DROP TABLE | ||
| + | |||
| + | mal reinschauen: | ||
| + | > echo " | ||
| + | id | verzeichnis | datei | name | type | jahr | laufzeit | altersfreigabe | genre | produzent | regie | schauspieler | handlung | ||
| + | ----+-------------+-------+------+------+------+----------+----------------+-------+-----------+-------+--------------+---------- | ||
| + | (0 Zeilen) | ||
| + | |||
| + | |||
| + | ==== Datensätze in der Tabelle ==== | ||
| + | |||
| + | zwei Datensätze eintragen: | ||
| + | INSERT INTO film (verzeichnis, | ||
| + | |||
| + | beide Datensätze nacheinander ändern: | ||
| + | UPDATE [Tabellenname] SET [Spaltenname1]=' | ||
| + | | ||
| + | UPDATE film SET genre=' | ||
| + | UPDATE film SET genre=' | ||
| + | |||
| + | |||
| + | ==== eine Tabelle umbenennen ==== | ||
| + | |||
| + | * [[https:// | ||
| + | |||
| + | ALTER TABLE [alter Tabellenname] RENAME TO [neuer Tabellenname]; | ||
| + | |||
| + | |||
| + | ==== eine Spalte zur Tabelle hinzufügen ==== | ||
| + | |||
| + | [[https:// | ||
| + | |||
| + | ALTER TABLE [Tabellenname] ADD [Spaltenname] [Spaltentyp]; | ||
| + | ALTER TABLE order_details ADD sort_datum date; | ||
| + | |||
| + | //Es gibt keine Möglichkeit, | ||
| + | |||
| + | |||
| + | ==== eine neue Tabelle anlegen, die genau die gleichen Spalten hat wie eine bereits vorhandene ==== | ||
| + | |||
| + | * [[https:// | ||
| + | |||
| + | CREATE TABLE [neuer Tabellenname] (LIKE [alter Tabellenname]); | ||
| + | |||
| + | |||
| + | ==== Volltextsuche (case-insensitive) ==== | ||
| + | |||
| + | > echo " | ||
| + | |||
| + | |||
| + | ==== weitere PostgreSQL-Kommandos ==== | ||
| + | |||
| + | < | ||
| + | Verbindungen: | ||
| + | User anzeigen: echo " | ||
| + | Zugriffsprivilegien: | ||
| + | Standard-Zugriffsprivilegien: | ||
| + | Datentypen: echo " | ||
| + | |||
| + | alle Datenbanken anzeigen: echo " | ||
| + | alle Relationen (Tabellen+Indizes+...): | ||
| + | |||
| + | Tabellen: echo " | ||
| + | Tablespaces: | ||
| + | |||
| + | Indizes: echo " | ||
| + | Schemas: echo " | ||
| + | |||
| + | Trigger: echo " | ||
| + | Domänen: echo " | ||
| + | Funktionen: echo " | ||
| + | Objektbeschreibungen: | ||
| + | Large Objects: echo " | ||
| + | Operatoren: echo " | ||
| + | installierten Erweiterungen: | ||
| + | Aggregatfunktionen: | ||
| + | Konversionen: | ||
| + | Textsuchekonfigurationen: | ||
| + | Textsuchewörterbücher: | ||
| + | Textsucheparser: | ||
| + | Textsuchevorlagen: | ||
| + | Liste der prozeduralen Sprachen: echo " | ||
| + | Liste der Operatoren: echo " | ||
| + | Liste der Sortierfolgen: | ||
| + | |||
| + | Stringausgabe: | ||
| + | Zeichensatzkodierung: | ||
| + | Zeldtrennzeichen: | ||
| + | Ausgabe direkt in eine Datei: echo "\o '/ | ||
| + | Ausgabe in eine Datei: echo "\w '/ | ||
| + | Ausgabe einem Kommando übergeben: echo "\w '| / | ||
| + | </ | ||
| + | |||
| + | |||
| + | ===== SQL ===== | ||
| + | |||
| + | * [[https:// | ||
| + | |||
| + | '' | ||
| + | (SELECT * FROM tabelle1) UNION (SELECT * FROM tabelle2) | ||
| + | |||
| + | '' | ||
| + | (SELECT * FROM tabelle1) INTERSECT (SELECT * FROM tabelle2) | ||
| + | |||
| + | '' | ||
| + | (SELECT * FROM tabelle1) EXCEPT (SELECT * FROM tabelle2) | ||
| + | |||
| + | Damit die Gegenüberstellung der beiden Ausgaben funktioniert, | ||
| + | |||
| + | |||
| + | ==== Mehrfacheinträge in einer Tabelle finden ==== | ||
| + | |||
| + | <file SQL mehrfache.sql> | ||
| + | DROP TABLE mehrfach_vorhanden; | ||
| + | CREATE TABLE mehrfach_vorhanden ( anzahl INT, zeile VARCHAR(10000) ); | ||
| + | |||
| + | DO $$ | ||
| + | DECLARE | ||
| + | eine_zeile VARCHAR(10000); | ||
| + | BEGIN | ||
| + | FOR eine_zeile IN | ||
| + | SELECT name | ||
| + | FROM liste | ||
| + | GROUP BY 1 | ||
| + | LOOP | ||
| + | INSERT INTO mehrfach_vorhanden SELECT COUNT(name), | ||
| + | END LOOP; | ||
| + | END; | ||
| + | $$ LANGUAGE PLPGSQL; | ||
| + | |||
| + | DELETE FROM mehrfach_vorhanden WHERE ANZAHL = 1; | ||
| + | SELECT anzahl, zeile FROM mehrfach_vorhanden ORDER BY 1 ASC; | ||
| + | </ | ||
| + | |||
| + | Am Ende werden in der zweiten Spalte alle mehrfach vorhandenen Einträge (Namen) und in der ersten Spalte die Anzahl dieser Einträge ausgegeben: | ||
| + | cat mehrfache.sql | psql -h 192.168.0.100 -p 5432 -U dbnutzer datenbank | ||
| + | |||
| + | |||
| + | ==== Summierung von Spesenabrechnungen ==== | ||
| + | |||
| + | So können beispielsweise die Gesamtausgaben (Spesen) jeder (mehrfach) eingetragenen Person leicht berechnet werden: | ||
| + | echo " | ||
| + | |||
| + | |||
| + | ===== PostgreSQL-Replikation (Cluster) ===== | ||
| + | |||
| + | [[https:// | ||
| + | |||
| + | * [[https:// | ||
| + | * **PgPool:** [[https:// | ||
| + | * **Citus:** [[https:// | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | |||
| + | |||
| + | ==== PgPool ==== | ||
| + | |||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | |||
| + | FreeBSD: | ||
| + | > pkg install databases/ | ||
| + | |||
| + | Debian: | ||
| + | > apt install pgpool2 | ||
| + | |||
