Wie kann ich mein public
Schema mit vollständiger Tabellenstruktur, Daten, Funktionen, fk, pk usw. in dieselbe Datenbank kopieren?
Meine Version von Postgres ist 8,4
PS. Ich muss das Schema NICHT Datenbank kopieren
Wie kann ich mein public
Schema mit vollständiger Tabellenstruktur, Daten, Funktionen, fk, pk usw. in dieselbe Datenbank kopieren?
Meine Version von Postgres ist 8,4
PS. Ich muss das Schema NICHT Datenbank kopieren
Antworten:
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.
pg_dump -n my_schema -f '/path/to/file.pgsql' my_db
. Am einfachsten als Superuser ( postgres
) mit pw-weniger peer
Berechtigung in pg_haba.conf
. Wiederherstellen nach dem ursprünglichen Schema umbenannt: psql my_db -f '/path/to/file.pgsql'
. Wenn Sie einen einfachen SQL-Speicherauszug haben, brauchen Sie nichtpg_restore
.
pg_dump -n schema_name > dump.sql vi dump.sql # edit the schema name psql: psql -f dump.sql
Wenn du mit PHP nicht weiterkommst, dann benutze entweder Back Tics
`/usr/bin/pg_dump-n myschema mydb -U username > /tmp/dump.sql`
oder der exec () Befehl. Für die Änderung können Sie sed auf die gleiche Weise verwenden.
Hier sind noch 6 Zeichen
public
. B. ).
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 Ihre Datenbank groß ist, aber für eine Entwicklungsdatenbank, die Sie gerade auf Ihrem lokalen Computer haben, problemlos funktionieren sollte.
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 wählen, nur die Struktur anstelle von beiden zu sichern).
Geben Sie der Sicherungsdatei einen Namen und wählen Sie ein Format. (Ich benutze normalerweise Tar.)
Klicken Sie auf Backup.
Klicken Sie mit der rechten Maustaste auf das Schema, von dem Sie eine Sicherungskopie erstellt haben, und klicken Sie auf Eigenschaften. Benennen Sie es vorübergehend in ein anderes Schema um. (zB tempprename )
Klicken Sie auf das Stammverzeichnis des Schemas und klicken Sie mit der rechten Maustaste darauf im Objektbrowser. Klicken Sie dann auf Neues Schema erstellen und geben Sie dem Schema den Namen public . Dies ist das Schema, in das Sie von Ihrer Sicherung kopieren.
Klicken Sie mit der rechten Maustaste auf das neue Schema public aus Schritt 5. und klicken Sie auf Wiederherstellen. Stellen Sie aus der Sicherungsdatei in Schritt 3 wieder her.
Benennen Sie das neue Schema public in einen anderen Namen um (z . B. newschema ).
Rename Schema temprename Wechsel von Schritt 4 zurück in den ursprünglichen Namen.
Du könntest benutzen
CREATE DATABASE new_db TEMPLATE = old_db;
Löschen Sie dann alle nicht benötigten Schemata:
DROP SCHEMA public CASCADE;
DROP SCHEMA other CASCADE;
Der einzige Nachteil ist , alle Verbindungen zu old_db muss bestimmt werden , bevor Sie die Kopie erstellen können (so dass der Prozess, der die läuft CREATE DATABASE
Anweisung muss eine Verbindung zum Beispiel zu template1)
Wenn dies keine Option ist, ist pg_dump / pg_restore die einzige Möglichkeit, dies zu tun.
Erweitere die Antwort auf user1113185 , hier ist ein vollständiger Workflow unter Verwendung von psql / pg_dump.
Der folgende Befehl exportiert alle Objekte von old_schema
und importiert sie in ein neues new_schema
Schema wie user
in der dbname
Datenbank:
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
public
?