Erstellen einer Tabelle im Einzelbenutzermodus in Postgres

8

Ich versuche, eine Dockerfile aus dem Postgres-Image zu erstellen. Der Repo sagt, dass die Initialisierung behandelt werden sollte, indem ein Shell-Skript in /docker-entrypoint-initdb.d/ platziert wird. Ich habe das folgende Skript basierend auf einem Beispiel, das ich online gefunden habe:

%Vor%

Die umgekehrten Schrägstriche scheinen erforderlich zu sein, da sonst ein Parse-Fehler auftritt. Das Skript wird ohne Fehler ausgeführt und alle Befehle mit Ausnahme der CREATE TABLE-Befehle scheinen einen Effekt zu haben.

Wird die Tabellenerstellung im Einzelbenutzermodus nicht unterstützt? Wenn ja, gibt es eine bessere Möglichkeit, ein Dockerfile mit Tabellen zu erstellen, die in Postgres erstellt wurden?

    
sdab 30.01.2015, 21:24
quelle

3 Antworten

10

@a_horse_with_no_name hat mich mit seinem Kommentar auf die richtige Spur gebracht. Ich entschied mich dafür, den Single-User-Modus zu verlassen, auch wenn es "empfohlen" wurde. Stattdessen starte ich Postgre mit pg_ctl, lade einige SQL-Dateien mit meinen Tabellenkreationen und stoppe den Server mit pg_ctl.

Mein Shell-Skript sieht so aus:

%Vor%     
sdab 31.01.2015, 00:46
quelle
5

Wenn Sie verhindern wollen, dass PostgreSQL für Benutzer zugänglich ist, bevor Sie mit der Installation beginnen, starten Sie sie nur mit Loopback-Zugriff oder nur mit einem Unix-Socket, initialisieren Sie sie und starten Sie sie für den allgemeinen Zugriff neu.

>

Ich spreche Docker nicht, aber wenn du das in einer normalen Umgebung machst, würdest du so etwas tun wie:

%Vor%

d. Starten Sie PostgreSQL nicht auf TCP / IP-Sockets und mit einem nicht standardmäßigen unix_socket_directories . Mach dein Setup. Dann starte es mit dem Standard (oder konfiguriert) unix_socket_directories und listen_addresses neu, sobald es für den allgemeinen Zugriff bereit ist.

Stattdessen könnten Sie:

  • Ändern Sie pg_hba.conf , um nur den Zugriff von Ihrem Setup-Benutzer / nur für die Loopback-Adresse / etc
  • zu erlauben
  • Start Pg
  • Mach dein Setup
  • Ersetzen Sie pg_hba.conf durch die Produktion
  • pg_ctl reload oder SELECT pg_reload_conf() , um die neuen Einstellungen zu laden und den allgemeinen Zugriff zu erlauben

... dies wird jedoch den Anwendungen ermöglichen, sich zu verbinden und dann ihre Authentifizierung während der Einrichtungsphase abzulehnen; das ist vielleicht nicht das, was Sie wollen, und nicht alle Anwendungen bewältigen das richtig.

    
Craig Ringer 01.02.2015 11:20
quelle
0

Ich habe dein Skript getestet und es funktioniert fast gut. Mit Postgresql 9.4 habe ich folgendes geschafft:

%Vor%

Grundsätzlich musste ich das Skript in zwei Teile aufteilen, da sich der PostgreSQL beschwert hat, dass das create database nicht in mehrzeiligen Skripts verwendet werden kann. Und der andere war, nur den Datenbanknamen orpheus für den zweiten Befehl hinzuzufügen.

Und voilà

    
gabuzo 05.05.2015 18:49
quelle

Tags und Links