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
postgresql
Sigra
quelle
quelle
public
?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.
quelle
pg_dump -n my_schema -f '/path/to/file.pgsql' my_db
. Am einfachsten als Superuser (postgres
) mit pw-wenigerpeer
Berechtigung inpg_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
.Wenn du mit PHP nicht weiterkommst, dann benutze entweder Back Tics
oder der exec () Befehl. Für die Änderung können Sie sed auf die gleiche Weise verwenden.
Hier sind noch 6 Zeichen
quelle
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.
quelle
Du könntest benutzen
Löschen Sie dann alle nicht benötigten Schemata:
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.
quelle
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 neuesnew_schema
Schema wieuser
in derdbname
Datenbank:quelle