postgres

postgres Basics

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=# 

\l listet alle 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 $$;

\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 <db_name> -h <host_name> -p <port_number> -U <db_user>                      

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/

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

  • postgres.txt
  • Zuletzt geändert: 11/10/2024 - 07:12
  • von admin