Postgres kann keinen Tabellenbereich erstellen

7

Ich habe gerade eine externe Festplatte zum Speichern meines neuen Tablespace bereitgestellt.

postgres@vostro ~ $ df -k
Filesystem     1K-blocks     Used Available Use% Mounted on
/dev/sdb1      480589520    71580 456082280   1% /mnt/DB

postgres@vostro ~ $ ls -l /mnt/DB/
total 4
drwxrwxrwx 2 postgres postgres 4096 May 25 17:02 postgres

demisc@vostro /mnt $ mount | grep -i sdb1
/dev/sdb1 on /mnt/DB type ext4 (rw,nosuid,nodev,relatime,data=ordered)

Ich habe alle erforderlichen Berechtigungen erteilt, damit Posgres die neuen ts in erstellen können /mnt/DB/postgres. Hier sind die Benutzergruppen:

postgres@vostro ~ $ id
uid=123(postgres) gid=131(postgres) groups=131(postgres),112(ssl-cert),1000(demisc)

Es passiert, dass beim Ausführen des Befehls create tablespace Folgendes angezeigt wird:

postgres=# create tablespace ts_project location '/mnt/DB/postgres';
ERROR:  could not set permissions on directory "/mnt/DB/postgres": 
Permission denied

Was fehlt mir?

ls -ln /mnt/DB/postgres

kehrt zurück:

demisc@vostro /mnt/DB $ ls -ln /mnt/DB/postgres/
total 0

Alles sieht gut aus. Es gibt keinen Grund, warum Benutzer von postgres den Tabellenbereich nicht erstellen können. Wenn ich zu postgres wechsle und versuche, eine Datei oder ein Verzeichnis im Pfad zu erstellen, funktioniert es einwandfrei.

Demis
quelle

Antworten:

3

Ich habe gerade eine Lösung gefunden. Ich habe die Erlaubnis von /mnt/DB/postgresauf 700 geändert :

postgres@vostro /mnt/DB $ ls -l
total 4
drwx------ 3 postgres postgres 4096 May 25 17:46 postgres

Jetzt funktionierte es die Schaffung der ts

postgres@vostro /mnt/DB/postgres $ ls -l
total 4
drwx------ 2 postgres postgres 4096 May 25 17:46 PG_9.5_201510051

Community-Wiki-Antwort erstellt aus einem Kommentar des Frageautors. Community-Wiki-Beiträge wurden an die Community gespendet, in der Hoffnung, dass andere sie bearbeiten, um sie auf dem neuesten Stand zu halten, nützliche Informationen hinzuzufügen und ihre Qualität im Allgemeinen zu verbessern.

user126897
quelle
2

Beim Erstellen eines Tabellenbereichs führt postgres intern einen chmod 0700Aufruf durch, um zu überprüfen, ob das von Ihnen angegebene Verzeichnis vorhanden ist und den richtigen Eigentümer hat.

Anscheinend kann der Benutzer des postgres-Betriebssystems in Ihrem Fall diesen chmod-Aufruf nicht ausführen. Dies wird auch durch die Tatsache bestätigt, dass Sie das Problem umgehen konnten, indem Sie die richtigen Berechtigungen manuell festgelegt haben (siehe Kommentare zur Frage selbst).

Leider fällt es mir ziemlich schwer zu sagen, was bei der Zuweisung von Berechtigungen schief gelaufen ist. Vielleicht lag es an SELinux bei der Arbeit.

Link zu dem Teil des Quellcodes, der ausgeführt wird chmod. https://doxygen.postgresql.org/backend_2commands_2tablespace_8c.html#af268dfe1eb53bf570eceec80b993e66a

Verwandte Diskussion in der Postgres-Mailingliste. Es wurde 2008 als kein Fehler eingestuft. Https://www.postgresql.org/message-id/200804191238.m3JCcfcJ076060%40wwwmaster.postgresql.org

Arronax
quelle