it-swarm.com.de

PostgreSQL: Wie erstelle ich eine vollständige Kopie des Datenbankschemas in derselben Datenbank?

Wie kann ich mein public Schema in dieselbe Datenbank mit vollständiger Tabellenstruktur, Daten, Funktionen, fk, pk usw. kopieren?.
Meine Version von Postgres ist 8.4
P.S. Ich muss Schema NICHT Datenbank kopieren

27
sigra

Es gibt keine einfache Möglichkeit, dies in pg_dump/pg_restore selbst zu tun. Sie können Folgendes versuchen, wenn Sie die Datenbank vorübergehend entfernen können.

  1. Erstellen Sie mit pg_dump einen Speicherauszug Ihres öffentlichen Schemas
  2. führen Sie "ALTER SCHEMA public RENAME TO public_copy" aus.
  3. Stellen Sie Ihren Speicherauszug Ihres öffentlichen Schemas aus Schritt 1 mit pg_restore wieder her
24
user1113185
pg_dump -n schema_name > dump.sql
vi dump.sql # edit the schema name
psql: psql -f dump.sql

Wenn Sie mit PHP stecken, dann verwenden Sie entweder Back Tics

`/usr/bin/pg_dump-n myschema mydb -U username > /tmp/dump.sql`

oder der Befehl exec (). Für die Änderung können Sie sed auf die gleiche Weise verwenden.

Hier sind 6 weitere Zeichen

9
Scott Marlowe

Mit pgAdmin können Sie Folgendes tun. Es ist ziemlich manuell, könnte aber alles sein, was Sie brauchen. Ein skriptbasierter Ansatz wäre viel wünschenswerter. Sie sind sich nicht sicher, wie gut dies funktioniert, wenn Sie keinen Administratorzugriff haben und wenn Ihre Datenbank groß ist, aber auf einer Entwicklungsdatenbank, die Sie nur auf Ihrem lokalen Computer haben, einwandfrei funktionieren sollte.

  1. Klicken Sie mit der rechten Maustaste auf den Schemanamen, den Sie kopieren möchten, und klicken Sie auf Sichern. (Sie können tiefer gehen und nur die Struktur anstelle von beiden sichern).

  2. Geben Sie der Sicherungsdatei einen Namen und wählen Sie auch ein Format. (Ich benutze normalerweise Tar.)

  3. Klicken Sie auf Sichern.

  4. Klicken Sie mit der rechten Maustaste auf das Schema, von dem Sie gesichert haben, und klicken Sie auf Eigenschaften, und benennen Sie es vorübergehend in etwas anderes um. (z. B. temprename)

  5. Klicken Sie auf das Stammverzeichnis des Schemas und klicken Sie im Objektbrowser mit der rechten Maustaste darauf. Klicken Sie auf neues Schema erstellen und geben Sie dem Schema den Namen public. Dies ist das Schema, in das Sie aus Ihrer Sicherung kopieren.

  6. Klicken Sie ab Schritt 5 mit der rechten Maustaste auf das neue Schema public und klicken Sie auf Wiederherstellen. In Schritt 3 aus der Sicherungsdatei wiederherstellen.

  7. Benennen Sie das neue Schema public in einen anderen Namen um (z. B. newschema).

  8. Schema umbenennen temprename von Schritt 4 zurück zum ursprünglichen Namen wechseln.

7
Kuberchaun

Du könntest benutzen

CREATE DATABASE new_db TEMPLATE = old_db;

Löschen Sie dann alle nicht benötigten Schemas:

DROP SCHEMA public CASCADE;
DROP SCHEMA other CASCADE;

Der einzige Nachteil ist, dass alle Verbindungen zu old_db bestimmt werden müssen, bevor Sie die Kopie erstellen können (daher muss der Prozess, der die Anweisung CREATE DATABASE Ausführt, beispielsweise eine Verbindung zu template1 herstellen).

Wenn dies keine Option ist, ist pg_dump/pg_restore die einzige Möglichkeit, dies zu tun.

erweiterung auf user1113185 Antwort , hier ist ein vollständiger Workflow mit psql/pg_dump.

Im Folgenden werden alle Objekte von old_schema Exportiert und in das neue Schema new_schema Als user in der Datenbank dbname importiert:

psql -U user -d dbname -c 'ALTER SCHEMA old_schema RENAME TO new_schema'
pg_dump -U user -n new_schema -f new_schema.sql dbname
psql -U user -d dbname -c 'ALTER SCHEMA new_schema RENAME TO old_schema'
psql -U user -d dbname -c 'CREATE SCHEMA new_schema'
psql -U user -q -d dbname -f new_schema.sql
rm new_schema.sql
3
dwelle