Postgres ermöglicht die Verwendung einer auf dem Server vorhandenen Datenbank als Vorlage beim Erstellen einer neuen Datenbank. Ich bin nicht sicher, ob pgAdmin Ihnen die Option im Dialogfeld "Datenbank erstellen" bietet, aber Sie sollten in der Lage sein, Folgendes in einem Abfragefenster auszuführen, wenn dies nicht der Fall ist:
CREATE DATABASE newdb WITH TEMPLATE originaldb OWNER dbuser;
Dennoch können Sie erhalten:
ERROR: source database "originaldb" is being accessed by other users
Um alle anderen Benutzer von der Datenbank zu trennen, können Sie folgende Abfrage verwenden:
SELECT pg_terminate_backend(pg_stat_activity.pid) FROM pg_stat_activity
WHERE pg_stat_activity.datname = 'originaldb' AND pid <> pg_backend_pid();
Servers
-> (mein Server) ->Databases
auswählen, mit der rechten Maustaste auf Datenbanken klicken und "Neue Datenbank" auswählen. Eine der Optionen ist die Vorlage, und das zum Erstellen der Datenbank verwendete SQL ist äquivalent. Es ist so viel schneller als ein Dump / Restore auf demselben Server.Eine Befehlszeilenversion von Bells Antwort :
Dies sollte unter den Berechtigungen des Datenbankmasters ausgeführt werden, normalerweise postgres.
quelle
createdb: database creation failed: ERROR: source database "conf" is being accessed by other users
wenn Sie versuchen, ihn in einer Produktionsdatenbank auszuführen, und Sie ihn erwartungsgemäß nicht herunterfahren möchten, um eine Kopie zu erstellen.Um eine vorhandene Datenbank mit Postgres zu klonen, können Sie dies tun
Die IT beendet die gesamte Verbindung zur Quelldatenbank, um den Fehler zu vermeiden
quelle
procpid
mitpid
für diese ArbeitIn einer Produktionsumgebung, in der die ursprüngliche Datenbank unter Datenverkehr steht, verwende ich einfach:
quelle
pg_dump -s
? postgresql.org/docs/current/static/app-pgdump.html$ createdb newdb
Sie kennen pgAdmin nicht,
pgdump
geben Ihnen jedoch einen Speicherauszug der Datenbank in SQL. Sie müssen nur eine Datenbank mit demselben Namen erstellen und dies tunum alle Tabellen und ihre Daten sowie alle Zugriffsrechte wiederherzustellen.
quelle
pg_dump -U postgres sourcedb | psql -U postgres newdb
obwohl die Effizienz dieser Technik fraglich sein kann (da Sie wahrscheinlich den Kontext zwischen Lesen und Schreiben wechseln)ssh dbserver pg_dump DBNAME | psql NEWDB
... oderpg_dump DBNAME | ssh otherserver pgsql NEWDB
... Berechtigungen und Authentifizierung müssen natürlich behandelt werden, wie Sie möchten.Erstens
sudo
als Datenbankbenutzer:Gehen Sie zur PostgreSQL-Befehlszeile:
Erstellen Sie die neue Datenbank, geben Sie die Rechte ein und beenden Sie:
Kopieren Sie Struktur und Daten aus der alten Datenbank in die neue:
quelle
\l+
. Warum der Größenunterschied?Ich habe diesen Ansatz mit den Beispielen von oben zusammengesetzt. Ich arbeite an einem "unter Last" -Server und habe den Fehler erhalten, als ich den Ansatz von @zbyszek aus versuchte. Ich war auch nach einer "Kommandozeilen" -Lösung.
createdb: database creation failed: ERROR: source database "exampledb" is being accessed by other users
.Folgendes hat bei
nohup
mir funktioniert ( Befehle, denen vorangestellt wurde , um die Ausgabe in eine Datei zu verschieben und vor einer Server-Trennung zu schützen ):nohup pg_dump exampledb > example-01.sql
createdb -O postgres exampledbclone_01
nohup psql exampledbclone_01 < example-01.sql
quelle
In pgAdmin können Sie eine Sicherungskopie von Ihrer ursprünglichen Datenbank erstellen und dann einfach eine neue Datenbank erstellen und aus der soeben erstellten Sicherung wiederherstellen:
quelle
Was ist der richtige Weg, um die gesamte Datenbank (ihre Struktur und Daten) in eine neue in pgAdmin zu kopieren?
Antworten:
Ausprobiert und getestet.
quelle
Aus der Dokumentation geht hervor , dass die Verwendung von
createdb
oderCREATE DATABASE
mit Vorlagen nicht empfohlen wird:pg_dump
oderpg_dumpall
ist ein guter Weg, um die Datenbank und alle Daten zu kopieren. Wenn Sie eine GUI wie pgAdmin verwenden, werden diese Befehle hinter den Kulissen aufgerufen, wenn Sie einen Sicherungsbefehl ausführen. Das Kopieren in eine neue Datenbank erfolgt in zwei Phasen: Sichern und Wiederherstellenpg_dumpall
speichert alle Datenbanken im PostgreSQL-Cluster. Der Nachteil dieses Ansatzes besteht darin, dass Sie eine möglicherweise sehr große Textdatei mit SQL erhalten, die zum Erstellen der Datenbank und zum Auffüllen der Daten erforderlich ist. Der Vorteil dieses Ansatzes besteht darin, dass Sie alle Rollen (Berechtigungen) für den Cluster kostenlos erhalten. Um alle Datenbanken zu sichern, führen Sie dies über das Superuser-Konto ausund wiederherzustellen
pg_dump
hat einige Komprimierungsoptionen, die Ihnen viel kleinere Dateien geben. Ich habe eine Produktionsdatenbank, die ich zweimal täglich mit einem Cron-Job sichereWo
compress
ist die Komprimierungsstufe (0 bis 9) undcreate
sagtpg_dump
an, Befehle zum Erstellen der Datenbank hinzuzufügen. Wiederherstellen (oder Verschieben in einen neuen Cluster) mithilfe vonDabei ist newdb der Name der Datenbank, die Sie verwenden möchten.
Andere Dinge, über die man nachdenken sollte
PostgreSQL verwendet ROLES zum Verwalten von Berechtigungen. Diese werden nicht von kopiert
pg_dump
. Außerdem haben wir uns nicht mit den Einstellungen in postgresql.conf und pg_hba.conf befasst (wenn Sie die Datenbank auf einen anderen Server verschieben). Sie müssen die conf-Einstellungen selbst herausfinden. Aber es gibt einen Trick, den ich gerade entdeckt habe, um Rollen zu sichern. Rollen werden auf Clusterebene verwaltet, und Sie könnenpg_dumpall
mit dem--roles-only
Befehlszeilenschalter die Sicherung nur der Rollen anfordern.quelle
PostgreSQL 9.1.2:
quelle
CREATE DATABASE newdb WITH TEMPLATE originaldb OWNER dbuser;
die ursprüngliche Datenbank inaktiv sein muss (keine Verbindungen mit Schreibzugriff) und neue Verbindungen zur ursprünglichen Datenbank während des Kopiervorgangs verhindert werden. Wenn Sie damit zufrieden sind, funktioniert dies.Für diejenigen, die noch interessiert sind, habe ich ein Bash-Skript entwickelt, das (mehr oder weniger) das tut, was der Autor wollte. Ich musste eine tägliche Kopie der Geschäftsdatenbank auf einem Produktionssystem erstellen, dieses Skript scheint den Trick zu tun. Denken Sie daran, die Werte für Datenbankname / Benutzer / pw zu ändern.
quelle
So erstellen Sie einen Datenbankspeicherauszug
So setzen Sie den Datenbankspeicherauszug zurück
quelle
Hier ist der gesamte Vorgang zum Erstellen eines Kopierens über eine Datenbank nur mit der pgadmin4-GUI (über Sicherung und Wiederherstellung).
Postgres wird mit Pgadmin4 geliefert. Wenn Sie macOS verwenden, können Sie
CMD
+ drückenSPACE
und eingebenpgadmin4
, um es auszuführen. Dadurch wird eine Browser-Registerkarte in Chrome geöffnet.Schritte zum Kopieren
1. Erstellen Sie das Backup
Klicken Sie dazu mit der rechten Maustaste auf die Datenbank -> "Backup"
2. Geben Sie der Datei einen Namen.
Wie
test12345
. Klicken Sie auf Sichern. Dadurch wird ein Binärdateidump erstellt, der nicht in einem.sql
Format vorliegt3. Sehen Sie, wo es heruntergeladen wurde
Unten rechts auf Ihrem Bildschirm sollte sich ein Popup befinden. Klicken Sie auf die Seite "Weitere Details", um zu sehen, wohin Ihr Backup heruntergeladen wurde
4. Suchen Sie den Speicherort der heruntergeladenen Datei
In diesem Fall ist es
/users/vincenttang
5. Stellen Sie die Sicherung von pgadmin wieder her
Angenommen, Sie haben die Schritte 1 bis 4 korrekt ausgeführt, haben Sie eine Wiederherstellungs-Binärdatei. Es kann vorkommen, dass Ihr Mitarbeiter Ihre Wiederherstellungsdatei auf seinem lokalen Computer verwenden möchte. Habe gesagt, Person gehe zu pgadmin und stelle wieder her
Klicken Sie dazu mit der rechten Maustaste auf die Datenbank -> "Wiederherstellen"
6. Wählen Sie den Dateisucher
Stellen Sie sicher, dass Sie den Speicherort der Datei manuell auswählen. Ziehen Sie eine Datei NICHT per Drag & Drop auf die Uploader-Felder in pgadmin. Weil Sie auf Fehlerberechtigungen stoßen. Suchen Sie stattdessen die gerade erstellte Datei:
7. Suchen Sie die Datei
Möglicherweise müssen Sie den Filter unten rechts auf "Alle Dateien" ändern. Suchen Sie die Datei danach ab Schritt 4. Klicken Sie nun zur Bestätigung auf die untere rechte Schaltfläche "Auswählen"
8. Stellen Sie die Datei wieder her
Diese Seite wird erneut mit dem Speicherort der ausgewählten Datei angezeigt. Fahren Sie fort und stellen Sie es wieder her
9. Erfolg
Wenn alles in Ordnung ist, sollte unten rechts ein Indikator für eine erfolgreiche Wiederherstellung angezeigt werden. Sie können zu Ihren Tabellen navigieren, um festzustellen, ob die Daten für jede Tabelle ordnungsgemäß wiederhergestellt wurden.
10. Wenn es nicht erfolgreich war:
Sollte Schritt 9 fehlschlagen, löschen Sie Ihr altes öffentliches Schema in Ihrer Datenbank. Gehen Sie zu "Abfrage-Tool"
Führen Sie diesen Codeblock aus:
Versuchen Sie nun die Schritte 5 bis 9 erneut, es sollte funktionieren
BEARBEITEN - Einige zusätzliche Hinweise. Aktualisieren Sie PGADMIN4, wenn beim Hochladen eine Fehlermeldung angezeigt wird, die der Wiederherstellung entspricht
quelle
Wenn die Datenbank offene Verbindungen hat, kann dieses Skript helfen. Ich verwende dies, um jede Nacht eine Testdatenbank aus einer Sicherung der Live-Produktionsdatenbank zu erstellen. Dies setzt voraus, dass Sie eine .SQL-Sicherungsdatei aus der Produktionsdatenbank haben (ich mache das in webmin).
quelle
Trennen Sie mit pgAdmin die Datenbank, die Sie als Vorlage verwenden möchten. Anschließend wählen Sie es als Vorlage zum Erstellen der neuen Datenbank aus. Dadurch wird vermieden, dass der bereits verwendete Fehler angezeigt wird.
quelle
Wenn Sie das gesamte Schema kopieren möchten, können Sie mit dem folgenden Befehl einen pg_dump erstellen:
pg_dump -h database.host.com -d database_name -n schema_name -U database_user --password
Und wenn Sie diesen Speicherauszug importieren möchten, können Sie Folgendes verwenden:
psql "host=database.host.com user=database_user password=database_password dbname=database_name options=--search_path=schema_name" -f sql_dump_to_import.sql
Weitere Informationen zu Verbindungszeichenfolgen: https://www.postgresql.org/docs/current/libpq-connect.html#LIBPQ-CONNSTRING
Oder kombinieren Sie es einfach in einem Liner:
quelle
Trennen Sie die Datenbank mit Vorlagen, die Sie als Vorlage verwenden möchten.
Führen Sie 2 Abfragen wie folgt aus
(Die obige SQL-Anweisung beendet alle aktiven Sitzungen mit TemplateDB. Anschließend können Sie sie als Vorlage zum Erstellen der neuen TargetDB-Datenbank auswählen. Dadurch wird vermieden, dass der bereits verwendete Fehler angezeigt wird.)
quelle
Versuche dies:
gl XD
quelle