# Postgres13 dump\_all wird in postgres16 wiederhergestellt, kann aber keine Tabelle erstellen

**URL:** https://www.pg-forum.de/t/postgres13-dump-all-wird-in-postgres16-wiederhergestellt-kann-aber-keine-tabelle-erstellen/13006
**Category:** Unkategorisiert
**Created:** [13. Mai 2024 um 14:04 UTC](https://www.pg-forum.de/t/postgres13-dump-all-wird-in-postgres16-wiederhergestellt-kann-aber-keine-tabelle-erstellen/13006 "2024-05-13T14:04:49Z")
**Posts on this page:** 7
**Page:** 1

<div class="post-metadata">

### Author: ![shakir](https://www.pg-forum.de/letter_avatar_proxy/v4/letter/s/e47c2d/32.png) [@shakir](https://www.pg-forum.de/u/shakir)
#### Post date: [13. Mai 2024 um 14:04 UTC](https://www.pg-forum.de/t/postgres13-dump-all-wird-in-postgres16-wiederhergestellt-kann-aber-keine-tabelle-erstellen/13006/1 "2024-05-13T14:04:49Z")

</div>

Hallo,

Ich habe dump\_all von postgres13  
in dem ich Datenbanken und Datenbankbenutzer habe

Ich habe dem Benutzer Berechtigungen für die Datenbank zugewiesen, indem ich den folgenden Befehl verwende  
„GEWÄHREN SIE ALLE PRIVILEGIEN FÜR DIE DATENBANK ‚DBNAME‘ AN ‚DBUSER‘“.

Und in postgressql13 kann ich eine Tabelle in der Datenbank erstellen.

Aber jetzt habe ich postgresql13 dump\_all in postgresql16 wiederhergestellt. Jetzt sind alle Datenbanken und Benutzer wiederhergestellt, aber ich kann keine Tabelle in jeder Datenbank erstellen.

bekomme einen Fehler  
FEHLER: Berechtigung für das öffentliche Schema verweigert.

Ich habe mehrere Benutzer und kann den Dbusern nicht jede Datenbank manuell gewähren.

wie ich dieses Problem lösen kann

---

<div class="post-metadata">

### Author: ![castorp](https://www.pg-forum.de/letter_avatar_proxy/v4/letter/c/e99b99/32.png) [@castorp](https://www.pg-forum.de/u/castorp)
#### Post date: [13. Mai 2024 um 14:54 UTC](https://www.pg-forum.de/t/postgres13-dump-all-wird-in-postgres16-wiederhergestellt-kann-aber-keine-tabelle-erstellen/13006/2 "2024-05-13T14:54:19Z")

</div>

> [@shakir](#):
>
> FEHLER: Berechtigung für das öffentliche Schema verweigert.

Seit Postgres 16 werden die Berechtigungen für das Schema `public` nicht mehr automatisch vergeben. Du musst für jede Datenbank den entsprechenden GRANT Befehl absetzen:

```
grant all on schema public to dbuser;

```

Wenn Du so viele Datenbanken hast, dass Du das nicht für jede einzeln machen willst, lass Dir ein Script generieren. Mit `psql` ist das recht einfach:

```
select format(E'\\c %s\ngrant all on schema public to dbuser;', datname)
from pg_database
where not datistemplate
\gexec

```

Achtung: das SELECT darf **nicht** mit `;` beendet werden. Das `\gexec` ersetzt das `;`

---

<div class="post-metadata">

### Author: ![shakir](https://www.pg-forum.de/letter_avatar_proxy/v4/letter/s/e47c2d/32.png) [@shakir](https://www.pg-forum.de/u/shakir)
#### Post date: [13. Mai 2024 um 15:22 UTC](https://www.pg-forum.de/t/postgres13-dump-all-wird-in-postgres16-wiederhergestellt-kann-aber-keine-tabelle-erstellen/13006/3 "2024-05-13T15:22:07Z")

</div>

> [@castorp](#):
>
> `dbuser`

Hallo,

Ich habe auch mehrere Benutzer.

Wie zum Beispiel hat dbuser1 DB1-Berechtigungen in Postgres13  
dbuser2 hat DB2-Berechtigungen in Postgres13  
dbuser3 hat DB3-Berechtigungen in Postgres13  
und so weiter

Wie kann ich in meinem Fall alle öffentlichen Schemata gewähren?

Danke für die Wiederholung

---

<div class="post-metadata">

### Author: ![castorp](https://www.pg-forum.de/letter_avatar_proxy/v4/letter/c/e99b99/32.png) [@castorp](https://www.pg-forum.de/u/castorp)
#### Post date: [14. Mai 2024 um 06:07 UTC](https://www.pg-forum.de/t/postgres13-dump-all-wird-in-postgres16-wiederhergestellt-kann-aber-keine-tabelle-erstellen/13006/4 "2024-05-14T06:07:33Z")

</div>

Wenn unterschiedliche Benutzer unterschiedliche Berechtigungen in den verschiedenen Datenbanken haben, brauchst Du eine Abfrage pro Benutzer. Die verschiedenen Abfragen kannst Du per UNION miteinander verbinden, so dass trotzdem nur ein Script entsteht.

```auto
select format(E'\\c %s\ngrant all on schema public to dbuser2;', datname)
from pg_database
where datname in ('db1', 'db2')
union all
select format(E'\\c %s\ngrant all on schema public to dbuser3;', datname)
from pg_database
where datname in ('db3', 'db4')
\gexec

```

Du kannst natürlich auch ein Skript pro Benutzer machen.

---

<div class="post-metadata">

### Author: ![shakir](https://www.pg-forum.de/letter_avatar_proxy/v4/letter/s/e47c2d/32.png) [@shakir](https://www.pg-forum.de/u/shakir)
#### Post date: [14. Mai 2024 um 08:57 UTC](https://www.pg-forum.de/t/postgres13-dump-all-wird-in-postgres16-wiederhergestellt-kann-aber-keine-tabelle-erstellen/13006/5 "2024-05-14T08:57:56Z")

</div>

> [@castorp](#):
>
> ```auto
> select format(E'\\c %s\ngrant all on schema public to dbuser2;', datname)
> from pg_database
> where datname in ('db1', 'db2')
> union all
> select format(E'\\c %s\ngrant all on schema public to dbuser3;', datname)
> from pg_database
> where datname in ('db3', 'db4')
> \gexec
> 
> ```

Hallo,

Ich habe es versucht, aber das funktioniert nicht

Ich habe das in Centos bemerkt, als ich postgres13 dump\_all und in postgres16 wiederherstelle  
In Centos funktioniert es.

Aber unter Ubuntu funktioniert es nicht. Ich habe die von Ihnen bereitgestellte Abfrage ausgeführt.

aber immer noch nicht in der Lage, Tabellen in der Datenbank zu erstellen, es kommt zu einem öffentlichen Schemafehler

---

<div class="post-metadata">

### Author: ![laurenz](https://www.pg-forum.de/letter_avatar_proxy/v4/letter/l/bc79bd/32.png) [@laurenz](https://www.pg-forum.de/u/laurenz)
#### Post date: [28. Mai 2024 um 08:12 UTC](https://www.pg-forum.de/t/postgres13-dump-all-wird-in-postgres16-wiederhergestellt-kann-aber-keine-tabelle-erstellen/13006/6 "2024-05-28T08:12:15Z")

</div>

“Es funktioniert nicht” ist eine ziemlich schwache Problembeschreibung.  
`\gexec` funktioniert nur mit `psql`, nicht mit anderen Clients.

---

<div class="post-metadata">

### Author: ![system](https://www.pg-forum.de/uploads/default/original/1X/dc97a981dd26692d5fb52e8b8fc7c090d7b9559a.png) [@system](https://www.pg-forum.de/u/system)
#### Post date: [27. Juli 2024 um 08:12 UTC](https://www.pg-forum.de/t/postgres13-dump-all-wird-in-postgres16-wiederhergestellt-kann-aber-keine-tabelle-erstellen/13006/7 "2024-07-27T08:12:37Z")

</div>

Dieses Thema wurde automatisch 60 Tage nach der letzten Antwort geschlossen. Es sind keine neuen Antworten mehr erlaubt.
