Dies ist eine alte Version des Dokuments!
Inhaltsverzeichnis
PostgreSQL 12
In PostgreSQL 9.5 lief die DB als User "pgsql", in PostgreSQL 12.3 läut die DB als User "postgres".
PostgreSQL 12.3 (FreeBSD 12.1-RELEASE)
> psql -V psql (PostgreSQL) 12.3 > su - postgres > psql -U postgres -l ; echo "\dg" | psql -U postgres postgres
Installation von PostgreSQL 12.3 auf FreeBSD 12.1-RELEASE
Zeichensatz prüfen, ich möchte die DB mit dem Zeichensatz "de_DE.UTF-8" betreiben, deshalb überprüfe ich, ob es den im System gibt:
> locale -a | fgrep de_DE.UTF-8 de_DE.UTF-8
…wie wir sehen, gibt es ihn im System…
Installation:
> pkg install databases/postgresql12-server
Vorbereitung:
> less /usr/local/share/doc/postgresql/README-server
> vi /etc/login.conf
### deutsch
german|German Users Accounts:\
:charset=UTF-8:\
:lang=de_DE.UTF-8:\
:setenv=LC_COLLATE=C:\
:tc=default:
> vi /etc/rc.conf
postgresql_enable="YES"
# postgresql_data="/usr/local/pgsql/data"
postgresql_data="/home/pgsql/data"
postgresql_class="german"
damit jeder Benutzer aus dem LAN (192.168.1.0/24) auf jede Datenbank zugreifen darf:
> vi /home/pgsql/data/pg_hba.conf ... # TYPE DATABASE USER ADDRESS METHOD ... host all all 192.168.1.0/24 trust ...
damit die Datenbank aus dem LAN (192.168.1.0/24) erreichbar ist:
> vi /home/pgsql/data/postgresql.conf ... listen_addresses = '*' ...
einmalige Initialisierung
> /usr/local/etc/rc.d/postgresql initdb
[root@freebsd13~]# service postgresql start 2021-04-16 02:53:00.713 MEST [94801] LOG: starting PostgreSQL 12.5 on amd64-portbld-freebsd13.0, compiled by FreeBSD clang version 11.0.1 (git@github.com:llvm/llvm-project.git llvmorg-11.0.1-0-g43ff75f2c3fe), 64-bit 2021-04-16 02:53:00.714 MEST [94801] LOG: erwarte Verbindungen auf IPv6-Adresse »::«, Port 5432 2021-04-16 02:53:00.714 MEST [94801] LOG: erwarte Verbindungen auf IPv4-Adresse »0.0.0.0«, Port 5432 2021-04-16 02:53:00.719 MEST [94801] LOG: erwarte Verbindungen auf Unix-Socket »/tmp/.s.PGSQL.5432« 2021-04-16 02:53:00.748 MEST [94801] LOG: Logausgabe nach stderr endet 2021-04-16 02:53:00.748 MEST [94801] TIPP: Die weitere Logausgabe geht an Logziel »syslog«. [root@freebsd13~]# service postgresql status pg_ctl: server is running (PID: 94801) /usr/local/bin/postgres "-D" "/home/pgsql/data"
zum PostgreSQL-root-User werden:
> su - postgres
Datenbanken anzeigen:
$ psql -l
Liste der Datenbanken
Name | Eigentümer | Kodierung | Sortierfolge | Zeichentyp | Zugriffsprivilegien
-----------+------------+-----------+--------------+-------------+-----------------------
postgres | postgres | UTF8 | C | de_DE.UTF-8 |
template0 | postgres | UTF8 | C | de_DE.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | C | de_DE.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
(3 Zeilen)
Tabellen aus einer Datenbank anzeigen:
$ echo "\dt" | psql -U postgres datenbankname
Benutzer antzeigen:
$ echo "\dg" | psql postgres
Liste der Rollen
Rollenname | Attribute | Mitglied von
------------+-----------------------------------------------------------------+--------------
postgres | Superuser, Rolle erzeugen, DB erzeugen, Replikation, Bypass RLS | {}
User anlegen:
$ createuser fritz
User anzeigen:
$ echo "\dg" | psql postgres
Liste der Rollen
Rollenname | Attribute | Mitglied von
------------+-----------------------------------------------------------------+--------------
fritz | | {}
postgres | Superuser, Rolle erzeugen, DB erzeugen, Replikation, Bypass RLS | {}
dem User ein Passwort geben:
$ echo "" | psql postgres
wieder ausloggen und wieder "ich" werden:
$ exit
Beispiel
Benutzer "mmroot" anlegen:
> createuser mmroot
Benutzer anzeigen:
> su - postgres -c 'echo "\dg+" | psql'
Datenbank "mm_oeffentlich" anlegen:
> su - postgres -c 'echo "CREATE DATABASE mm_oeffentlich OWNER = mmroot" | psql' CREATE DATABASE
Datenbanken anzeigen
> su - postgres -c 'psql postgres -l'
Tabelle "video" anlegen (es ist nur eine einzige Tabelle, eigentlich müsste sie bis zur 3. Normalform normalisiert werden und somit in 2 Tabellen aufgeteilt werden):
> su - postgres -c 'echo "CREATE TABLE video (id SERIAL, inode INT, quersumme VARCHAR(1000), dateiname VARCHAR(10000));" | psql mm_oeffentlich' CREATE TABLE
Tabellen anzeigen:
> su - postgres -c "echo \"SELECT tablename FROM pg_tables WHERE schemaname != 'pg_catalog' AND schemaname != 'information_schema';\" | psql -d mm_oeffentlich" tablename ----------- video (1 row)
Tabelleninhalt anzeigen:
> su - postgres -c "echo \"SELECT * FROM video;\" | psql -d mm_oeffentlich" id | inode | quersumme | dateiname ----+-------+-----------+----------- (0 rows)
testweise einen Datensatz in die Tabelle eintragen:
> su - postgres -c "echo \"INSERT INTO video (inode,quersumme,dateiname) VALUES ('1234567','asdfghjkl','Film.mkv');\" | psql -d mm_oeffentlich"
INSERT 0 1
Testdatensatz anzeigen:
> su - postgres -c "echo \"SELECT * FROM video;\" | psql -d mm_oeffentlich" id | inode | quersumme | dateiname ----+---------+-----------+----------- 1 | 1234567 | asdfghjkl | Film.mkv (1 row)
Tabelleninhalt zählen:
> su - postgres -c "echo \"SELECT COUNT(*) FROM video;\" | psql -d mm_oeffentlich"
count
-------
1
(1 row)
Tabelle "video" löschen:
> su - postgres -c 'echo "DROP TABLE video;" | psql mm_oeffentlich' DROP TABLE
Tabelle "video" anlegen:
> su - postgres -c 'echo "CREATE TABLE video (id SERIAL, inode INT, quersumme VARCHAR(1000), dateiname VARCHAR(10000));" | psql mm_oeffentlich' CREATE TABLE
