====== postgres Basics ======
https://computingforgeeks.com/how-to-install-postgresql-13-on-ubuntu/
===== Shell Zugang =====
thommie@db2b:~$ sudo su postgres
postgres@db2b:/home/thommie$ psql
psql (13.6 (Ubuntu 13.6-1.pgdg20.04+1))
Type "help" for help.
postgres=#
===== psql =====
Basisbefehle
\l Áuflisten aller DBs
Danach zu einer DB verbinden
postgres=# \c openproject postgres
You are now connected to database "openproject" as user "postgres".
\dt listet alle Tabellen in einer Datenbank auf
Schemata: https://www.postgresqltutorial.com/postgresql-administration/postgresql-schema/
Das Standard Schema ist public
Alle Tabellen in einer DB löschen
DO $$ DECLARE
r RECORD;
BEGIN
FOR r IN (SELECT tablename FROM pg_tables WHERE schemaname = current_schema()) LOOP
EXECUTE 'DROP TABLE ' || quote_ident(r.tablename) || ' CASCADE';
END LOOP;
END $$;
\q beendet die Verbindung
===== User Passwort ändern =====
\du listet alle User
ALTER ROLE [username] WITH PASSWORD 'xxxx';
Zugriffsrechte auf Datenbank erteilen
GRANT ALL ON DATABASE [dbname] TO [username];
postgres=# GRANT ALL ON DATABASE keycloak TO keycloak;
GRANT
Historie der Kommandos in psql
\s command history
beenden
\q DB shell beenden
====== Duplizieren einer Datenbank ======
Zuerst müssen alles laufenden Connections getrennt werden
SELECT pg_terminate_backend(pg_stat_activity.pid) FROM pg_stat_activity
WHERE pg_stat_activity.datname = 'Discourse' AND pid <> pg_backend_pid();
Danach wird kopiert
CREATE DATABASE Discoursedev WITH TEMPLATE Discourse OWNER postgres;
====== Dump einer Datenbank als sql ======
1. Login auf Postgress Server
2. sudo nach postgres
3. Wechsel ins Home Dir von postgres (wg. Schreibrechten für sqwl File
root@db2b:/home/thommie# sudo su postgres
postgres@db2b:/home/thommie$ cd ~
postgres@db2b:~$ pwd
/var/lib/postgresql
mit psql \l Namen aller DBs auflisten
postgres@db2b:~$ psql
psql (13.6 (Ubuntu 13.6-1.pgdg20.04+1))
Type "help" for help.
postgres=# \l
Danach die Datenbanken dumpen:
pg_dump pixelfed >> pixelfed_tokoeka.sql
Datenbank löschen
$ dropdb your_database
====== Verbindungstest zum postgresql Server ======
Test einer postgres Verbindung: pg_isready ist Teil von postgresql-client
pg_isready -d -h -p -U
Praktisch:
root@docker2:/var/discourse# pg_isready -d Discoursedev -h 10.10.10.18 -p 5432 -U Discourse
10.10.10.18:5432 - Verbindungen werden angenommen
root@docker2:/var/discourse#
====== Import der Datenbanken ======
psql -U postgres -W -d keycloak -f keycloak_tokoeka.sql
====== Alte Daten löschen ======
Datenbank
drop DATABASE onlyoffice;
User/Rolle
Auflisten der User
\du
Löschen eines Users
drop user IF EXISTS dendrite;
====== Postgres und UTF8 ======
Standardmässig werden neue Datenbanken mit der Zeichenkondierung SQL_ASCII angelegt. Das passt meistens, aber nicht immer. Mit dieser Methode werden DBs mit UTF8 Kodierung angelegt:
https://www.shubhamdipt.com/blog/how-to-change-postgresql-database-encoding-to-utf8/
===== Für template1 das encoding auf UTF8 ändern =====
postgres=# UPDATE pg_database SET datistemplate = FALSE WHERE datname = 'template1';
postgres=# DROP DATABASE template1;
postgres=# CREATE DATABASE template1 WITH TEMPLATE = template0 ENCODING = 'UTF8';
postgres=# UPDATE pg_database SET datistemplate = TRUE WHERE datname = 'template1';
postgres=# \c template1;
You are now connected to database "template1" as user "postgres".
template1=# VACUUM FREEZE;
Neu angelegte DBs auf Basis von template1 haben danach utf8 encoding