Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
postgres [04/11/2023 - 13:36] – thommie4 | postgres [11/05/2025 - 16:46] (aktuell) – thommie_netzwissen.de | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
- | ====== postgres ====== | + | ====== postgres |
- | https:// | + | [[https:// |
- | ====== Shell Zugang | + | ===== Shell Zugang ===== |
+ | psql Cheat Sheet: [[https:// | ||
< | < | ||
+ | |||
thommie@db2b: | thommie@db2b: | ||
+ | |||
</ | </ | ||
+ | |||
+ | < | ||
+ | \l | ||
+ | |||
+ | </ | ||
+ | |||
+ | listet alle Datenbanken | ||
+ | |||
+ | * \c verbindet zu einer Datenbank | ||
+ | * \dt zeigt die Tabellen nach einer Verbindung | ||
+ | * \d und \d+ zeigt die Spalten einer Tabelle | ||
+ | * \du Benutzerrollen | ||
+ | |||
+ | ===== Datenbank und User anlegen ===== | ||
< | < | ||
- | postgres@db2b:/ | + | create database sqlmail; |
- | psql (13.6 (Ubuntu 13.6-1.pgdg20.04+1)) | + | |
- | Type " | + | create user sqlmail with encrypted password ' |
- | postgres=# | + | |
+ | grant all privileges on database sqlmail to sqlmail; | ||
</ | </ | ||
+ | ===== Datenbank duplizieren ===== | ||
- | \l listet alle DBs | + | WER greift gerade auf die DB zu? |
- | Zu einer DB verbinden | + | < |
+ | SELECT usename, datname, state FROM pg_stat_activity WHERE usename=' | ||
+ | |||
+ | </ | ||
+ | |||
+ | Alle aktiven Verbindungen zu dieser | ||
< | < | ||
- | postgres=# \c openproject postgres | + | SELECT pg_terminate_backend(pid) |
- | You are now connected to database " | + | FROM pg_stat_activity |
+ | WHERE datname | ||
</ | </ | ||
- | \dt listet alle Tabellen | + | Danach kann man die Datenbank duplizieren, |
- | Schemata: https:// | + | < |
- | Das Standard Schema ist public | + | CREATE DATABASE newdb WITH TEMPLATE originaldb OWNER dbuser; |
- | Alle Tabellen löschen | + | </ |
+ | ===== Schemata ===== | ||
+ | |||
+ | [[https:// | ||
+ | |||
+ | ===== Arbeiten an der Datenbank ===== | ||
+ | |||
+ | dt listet alle Tabellen in einer Datenbank auf | ||
+ | |||
+ | Nach "\c discourse2": | ||
< | < | ||
+ | |||
DO $$ DECLARE | DO $$ DECLARE | ||
r RECORD; | r RECORD; | ||
Zeile 41: | Zeile 78: | ||
END LOOP; | END LOOP; | ||
END $$; | END $$; | ||
+ | |||
+ | </ | ||
+ | |||
+ | q beendet die Verbindung | ||
+ | |||
+ | ===== Benutzeraktionen ===== | ||
+ | |||
+ | \du listet alle User | ||
+ | |||
+ | neuen User anlegen (" | ||
+ | < | ||
+ | |||
+ | postgres=# CREATE ROLE discourse2; | ||
+ | CREATE ROLE | ||
+ | postgres=# | ||
+ | |||
+ | </ | ||
+ | |||
+ | Passwort setzen | ||
+ | |||
+ | < | ||
+ | ALTER ROLE [username] WITH PASSWORD ' | ||
+ | |||
+ | </ | ||
+ | |||
+ | ==== GRANT Statement ==== | ||
+ | |||
+ | nur login | ||
+ | |||
+ | < | ||
+ | ALTER ROLE discourse2 LOGIN; | ||
+ | |||
+ | </ | ||
+ | |||
+ | Weitere Privilegien: | ||
+ | |||
+ | < | ||
+ | GRANT privilege_list | ALL | ||
+ | ON table_name | ||
+ | TO role_name; | ||
+ | |||
+ | </ | ||
+ | |||
+ | privilege_list kann '' | ||
+ | < | ||
+ | |||
+ | GRANT ALL ON DATABASE [dbname] TO [username]; | ||
+ | |||
+ | postgres=# GRANT ALL ON DATABASE keycloak TO keycloak; | ||
+ | GRANT | ||
+ | |||
+ | </ | ||
+ | |||
+ | Löschen eines Users | ||
+ | |||
+ | < | ||
+ | drop user IF EXISTS dendrite; | ||
+ | |||
+ | </ | ||
+ | |||
+ | ===== Tabellen-Aktionen ===== | ||
+ | |||
+ | Alle Tabellen löschen | ||
+ | |||
+ | < | ||
+ | DO $$ | ||
+ | DECLARE | ||
+ | r RECORD; | ||
+ | BEGIN | ||
+ | FOR r IN (SELECT tablename FROM pg_tables WHERE schemaname = ' | ||
+ | | ||
+ | END LOOP; | ||
+ | END $$; | ||
+ | |||
+ | </ | ||
+ | |||
+ | check | ||
+ | < | ||
+ | |||
+ | SELECT tablename FROM pg_tables WHERE schemaname = ' | ||
+ | |||
+ | </ | ||
+ | |||
+ | ===== Daten-Aktionen ===== | ||
+ | |||
+ | < | ||
+ | do $$ declare | ||
+ | r record; | ||
+ | begin | ||
+ | for r in (select tablename from pg_tables where schemaname = ' | ||
+ | | ||
+ | end loop; | ||
+ | end $$; | ||
+ | |||
+ | </ | ||
+ | |||
+ | Komplette Datenbank löschen | ||
+ | < | ||
+ | |||
+ | drop DATABASE onlyoffice; | ||
+ | |||
</ | </ | ||
+ | ===== Historie der Kommandos in psql ===== | ||
\s command history | \s command history | ||
+ | |||
+ | beenden | ||
\q DB shell beenden | \q DB shell beenden | ||
- | ====== Dump der Datenbanken | + | ====== Dump einer Datenbank als sql file ====== |
- | Login auf Postgress | + | - Login auf postgres |
+ | - sudo nach postgres | ||
+ | - Wechsel ins Home Dir von postgres (wg. Schreibrechten für sql File) | ||
< | < | ||
Zeile 57: | Zeile 200: | ||
postgres@db2b: | postgres@db2b: | ||
/ | / | ||
+ | |||
</ | </ | ||
Zeile 66: | Zeile 210: | ||
Type " | Type " | ||
postgres=# \l | postgres=# \l | ||
+ | |||
</ | </ | ||
- | Danach Datenbanken dumpen: | + | Danach |
< | < | ||
- | pg_dump pixelfed >> pixelfed_tokoeka.sql | + | pg_dump pixelfed>> |
</ | </ | ||
- | ====== Postgres und UTF8 ====== | + | Datenbank löschen |
+ | |||
+ | < | ||
+ | $ dropdb your_database | ||
+ | |||
+ | </ | ||
- | Standardmässig werden neue Datenbanken mit Zeichenkondierung SQL_ASCII angelegt. Das passt meistens, aber nicht immer. Mit dieser methode werden DBs mit UTF8 angelegt: | + | ====== Verbindungstest zum postgresql |
- | https:// | + | |
- | ===== Datenbank sichern ===== | + | Test einer postgres Verbindung: pg_isready ist Teil von postgresql-client |
< | < | ||
- | $ pg_dump your_database | + | pg_isready -d <db_name> -h < |
</ | </ | ||
- | Datenbank löschen | + | Praktisch: |
< | < | ||
- | $ dropdb your_database | + | root@docker2:/ |
+ | 10.10.10.18: | ||
+ | root@docker2:/ | ||
</ | </ | ||
- | ===== Für template1 das encoding auf UTF8 ändern | + | ====== Import der Datenbanken ====== |
< | < | ||
+ | psql -U postgres -W -d keycloak -f keycloak_tokoeka.sql | ||
+ | |||
+ | </ | ||
+ | |||
+ | ===== Templates und UTF8 encoding ===== | ||
+ | |||
+ | Standardmässig werden neue Datenbanken mit der Zeichenkondierung SQL_ASCIIangelegt. Das passt meistens, aber nicht immer. Mit dieser Methode werden DBs mit UTF8 Kodierung angelegt: | ||
+ | |||
+ | [[https:// | ||
+ | < | ||
+ | |||
postgres=# UPDATE pg_database SET datistemplate = FALSE WHERE datname = ' | postgres=# UPDATE pg_database SET datistemplate = FALSE WHERE datname = ' | ||
postgres=# DROP DATABASE template1; | postgres=# DROP DATABASE template1; | ||
Zeile 101: | Zeile 266: | ||
You are now connected to database " | You are now connected to database " | ||
template1=# VACUUM FREEZE; | template1=# VACUUM FREEZE; | ||
- | </ | ||
+ | </ | ||
Neu angelegte DBs auf Basis von template1 haben danach utf8 encoding | Neu angelegte DBs auf Basis von template1 haben danach utf8 encoding | ||