PostgreSQL: Unterschied zwischen den Versionen
Codica (Diskussion | Beiträge) |
Codica (Diskussion | Beiträge) |
||
(10 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 4: | Zeile 4: | ||
Die [[Debian]]-Pakete sehen getrennte Konfigurations- und Datenverzeichnisse vor. Siehe https://wiki.debian.org/PostgreSql . | Die [[Debian]]-Pakete sehen getrennte Konfigurations- und Datenverzeichnisse vor. Siehe https://wiki.debian.org/PostgreSql . | ||
+ | |||
+ | Siehe zu ersten Schritten mit Postgres auch: | ||
+ | * https://www3.ntu.edu.sg/home/ehchua/programming/sql/PostgreSQL_GetStarted.html | ||
=== User anlegen === | === User anlegen === | ||
Zeile 19: | Zeile 22: | ||
Ggf. muss man noch die Datei <code> /etc/postgresql/9.5/main/pg_hba.conf </code> so anpassen, dass auch eine Einwahl mit Passwort möglich ist. Dazu ist eine Zeile wie die folgende einzutragen: | Ggf. muss man noch die Datei <code> /etc/postgresql/9.5/main/pg_hba.conf </code> so anpassen, dass auch eine Einwahl mit Passwort möglich ist. Dazu ist eine Zeile wie die folgende einzutragen: | ||
local MYDB MYPOSTGRESUSER password | local MYDB MYPOSTGRESUSER password | ||
+ | |||
+ | Die Reihenfolge der Zeilen ist wichtig.<ref>Siehe https://www.postgresql.org/docs/current/auth-pg-hba-conf.html </ref>. Eine Zeile wie | ||
+ | local all all peer | ||
+ | sollte daher hinter anderen local-Anweisungen stehen, die spezifischere Authentifizierungsmethoden wie <code>md5</code> oder <code>password</code> kennen. | ||
In <code>$HOME/.pgpass</code> kann man zum Verzicht auf die Passworteingabe Zeilen nach dem folgenden Muster einfügen:<ref>https://www.postgresql.org/docs/11/static/libpq-pgpass.html</ref> | In <code>$HOME/.pgpass</code> kann man zum Verzicht auf die Passworteingabe Zeilen nach dem folgenden Muster einfügen:<ref>https://www.postgresql.org/docs/11/static/libpq-pgpass.html</ref> | ||
Zeile 27: | Zeile 34: | ||
Man MUSS den Zugriff auf .pgpass einschränken: | Man MUSS den Zugriff auf .pgpass einschränken: | ||
chmod 0600 ~/.pgpass | chmod 0600 ~/.pgpass | ||
+ | |||
+ | === Postgres-Version === | ||
+ | |||
+ | Um im <code>psql</code>-Client oder in anderen SQL-Verbindungen die Version des Servers auszugeben, verwendet man: | ||
+ | |||
+ | SELECT version(); | ||
+ | |||
+ | === Konfigurationsdatei === | ||
+ | |||
+ | Um den Ort der Konfigurationsdateien des Postgres-Servers zu finden verwendet man | ||
+ | |||
+ | sudo -u postgres psql | ||
+ | |||
+ | und folgende Befehle<ref>Siehe https://www.postgresql.org/docs/current/runtime-config-file-locations.html</ref> | ||
+ | SHOW data_directory; | ||
+ | SHOW config_file; | ||
+ | SHOW hba_file; | ||
+ | |||
+ | === Postgres on Android === | ||
+ | |||
+ | PostgresSQL läuft auch auf Android. Dazu benötigt man die App Termux. Siehe | ||
+ | * https://stackoverflow.com/questions/33474468/can-i-use-postgresql-in-android-phone | ||
== Zeilenbasierte Zugriffsrechte == | == Zeilenbasierte Zugriffsrechte == | ||
Zeile 36: | Zeile 65: | ||
* https://blog.2ndquadrant.com/application-users-vs-row-level-security/ | * https://blog.2ndquadrant.com/application-users-vs-row-level-security/ | ||
− | == REST-API mit Node.js und PostgreSQL == | + | == Node.js-Zugriff auf PostgreSQL == |
+ | === Node.js-Client-Bibliotheken für JavaScript und TypeScript === | ||
+ | |||
+ | Siehe | ||
+ | * [[Softwareentwicklung#JavaScript for PostgreSQL]] | ||
+ | * [[TypeScript#TypeScript und PostgreSQL]] | ||
+ | |||
+ | === REST-API mit Node.js und PostgreSQL === | ||
Siehe | Siehe | ||
* [https://github.com/jorditost/node-postgres-restapi node-postgres-restapi] | * [https://github.com/jorditost/node-postgres-restapi node-postgres-restapi] | ||
Zeile 42: | Zeile 78: | ||
* [https://node-postgres.com/guides/project-structure Projektstrukturvorschlag bei Nutzung von PostgreSQL mit Node.js] | * [https://node-postgres.com/guides/project-structure Projektstrukturvorschlag bei Nutzung von PostgreSQL mit Node.js] | ||
+ | == Fensterfunktionen in PostgresSQL == | ||
+ | |||
+ | Mit sogenannten Fensterfunktionen oder Window Functions können sehr viele Operationen in der Datenbank abgebildet werden, die sonst der Client mit üblicherweise hohem Aufwand programmatisch durchführen musste. | ||
+ | |||
+ | Siehe | ||
+ | * [https://wiki.postgresql.org/wiki/File:PostgreSQL_Window_Functions.pdf Window Functions um ein FIFO-System in der Datenbank zu erstellen] - ausführliche Anleitung | ||
+ | * [https://stackoverflow.com/questions/43831286/postgres-fifo-query-calculate-profit-margin Window Functions um ein FIFO-System in der Datenbank zu erstellen] - Stackoverflow-Code ohne Erläuterung; die dort genannte Lösung dürfte nicht sehr gut skalieren, weil - zumindest als Zwischenergebnis - jedes einzelne Stück angeschaut wird (für 10000 in vier Lieferungen heraus- und hereingenommene Stücke entstehen dadurch mindestens 10000 Datensätze). | ||
+ | |||
+ | == Rest-API mit Postgres == | ||
+ | |||
+ | Siehe | ||
+ | * https://postgrest.org/ basiert auf Haskell | ||
+ | * pREST - basiert auf Go | ||
+ | * [[Supabase]] | ||
------ | ------ | ||
<references/> | <references/> | ||
[[Category:Datenbank]] | [[Category:Datenbank]] | ||
[[Category:ServerSoftware]] | [[Category:ServerSoftware]] |
Aktuelle Version vom 20. Januar 2024, 08:43 Uhr
PostgreSQL ist eine weit verbreitete feature-reiche SQL-Datenbank, einigermaßen vergleichbar mit MySQL.
Installation und Konfiguration
Die Debian-Pakete sehen getrennte Konfigurations- und Datenverzeichnisse vor. Siehe https://wiki.debian.org/PostgreSql .
Siehe zu ersten Schritten mit Postgres auch:
User anlegen
Man wählt sich als User postgres
in seine Datenbank DATABASE ein:
sudo -u postgres psql DATABASE
Dann erzeugt man den Nutzer BENUTZER mit folgender Anweisung:
CREATE USER BENUTZER WITH PASSWORD 'BENUTZERPASSWORT';
Normalerweise akzeptiert PostgreSQL nur die peer
-Authentifizierungsmethode über den Linux-User. Falls selbst diese Berechtigung fehlen sollte, muss eine Zeile wie die folgende eingefügt werden:
local sameuser USER peer
USER sollte dem Namen des Linux-User entsprechen.
Ggf. muss man noch die Datei /etc/postgresql/9.5/main/pg_hba.conf
so anpassen, dass auch eine Einwahl mit Passwort möglich ist. Dazu ist eine Zeile wie die folgende einzutragen:
local MYDB MYPOSTGRESUSER password
Die Reihenfolge der Zeilen ist wichtig.[1]. Eine Zeile wie
local all all peer
sollte daher hinter anderen local-Anweisungen stehen, die spezifischere Authentifizierungsmethoden wie md5
oder password
kennen.
In $HOME/.pgpass
kann man zum Verzicht auf die Passworteingabe Zeilen nach dem folgenden Muster einfügen:[2]
hostname:port:database:username:password
Beispiel
localhost:*:MYDB:MYPOSTGRESUSER:PASS
Man MUSS den Zugriff auf .pgpass einschränken:
chmod 0600 ~/.pgpass
Postgres-Version
Um im psql
-Client oder in anderen SQL-Verbindungen die Version des Servers auszugeben, verwendet man:
SELECT version();
Konfigurationsdatei
Um den Ort der Konfigurationsdateien des Postgres-Servers zu finden verwendet man
sudo -u postgres psql
und folgende Befehle[3]
SHOW data_directory; SHOW config_file; SHOW hba_file;
Postgres on Android
PostgresSQL läuft auch auf Android. Dazu benötigt man die App Termux. Siehe
Zeilenbasierte Zugriffsrechte
Row-Level-Security gibt es seit PostgreSQL 9.5. Es ermöglicht Zugriffsrechte auf bestimmte Zeilen für den jeweiligen Nutzer einzuschränken.
Siehe
- https://www.postgresql.org/docs/current/static/ddl-rowsecurity.html
- https://blog.2ndquadrant.com/application-users-vs-row-level-security/
Node.js-Zugriff auf PostgreSQL
Node.js-Client-Bibliotheken für JavaScript und TypeScript
Siehe
REST-API mit Node.js und PostgreSQL
Siehe
- node-postgres-restapi
- http://mherman.org/blog/2016/03/13/designing-a-restful-api-with-node-and-postgres/
- Projektstrukturvorschlag bei Nutzung von PostgreSQL mit Node.js
Fensterfunktionen in PostgresSQL
Mit sogenannten Fensterfunktionen oder Window Functions können sehr viele Operationen in der Datenbank abgebildet werden, die sonst der Client mit üblicherweise hohem Aufwand programmatisch durchführen musste.
Siehe
- Window Functions um ein FIFO-System in der Datenbank zu erstellen - ausführliche Anleitung
- Window Functions um ein FIFO-System in der Datenbank zu erstellen - Stackoverflow-Code ohne Erläuterung; die dort genannte Lösung dürfte nicht sehr gut skalieren, weil - zumindest als Zwischenergebnis - jedes einzelne Stück angeschaut wird (für 10000 in vier Lieferungen heraus- und hereingenommene Stücke entstehen dadurch mindestens 10000 Datensätze).
Rest-API mit Postgres
Siehe
- https://postgrest.org/ basiert auf Haskell
- pREST - basiert auf Go
- Supabase