Jak mogę skopiować mój public
schemat do tej samej bazy danych z pełną strukturą tabeli, danymi, funkcjami, fk, pk itp.
Moja wersja Postgresa to 8.4
PS Muszę skopiować schemat NIE bazy danych
postgresql
Sigra
źródło
źródło
public
?Odpowiedzi:
Nie ma prostego sposobu, aby to zrobić w samym pg_dump / pg_restore. Możesz spróbować wykonać następujące czynności, jeśli możesz tymczasowo usunąć bazę danych.
źródło
pg_dump -n my_schema -f '/path/to/file.pgsql' my_db
. Najłatwiejszy jako superuser (postgres
) zpeer
autoryzacją bez pw wpg_haba.conf
. Przywrócić po zmianie nazwy oryginalnego schematu:psql my_db -f '/path/to/file.pgsql'
. Jeśli masz zwykły zrzut SQL, nie potrzebujeszpg_restore
.Jeśli utkniesz z php, użyj jednego z tylnych tików
lub polecenie exec (). Do zmiany możesz użyć sed w ten sam sposób.
Oto 6 dodatkowych znaków
źródło
public
.).Za pomocą pgAdmin możesz wykonać następujące czynności. Jest dość ręczny, ale może być wszystkim, czego potrzebujesz. Podejście oparte na skryptach byłoby znacznie bardziej pożądane. Nie jestem pewien, jak dobrze to zadziała, jeśli nie masz dostępu administratora i jeśli Twoja baza danych jest duża, ale powinna dobrze działać na bazie danych programowania, którą masz tylko na komputerze lokalnym.
Kliknij prawym przyciskiem myszy nazwę schematu, którą chcesz skopiować, a następnie kliknij polecenie Kopia zapasowa. (Możesz przejść głębiej i wybrać kopię zapasową struktury zamiast obu).
Nadaj nazwę plikowi kopii zapasowej, a także wybierz format. (Zwykle używam Tar.)
Kliknij Kopia zapasowa.
Kliknij prawym przyciskiem myszy schemat, z którego utworzono kopię zapasową, kliknij właściwości i tymczasowo zmień jego nazwę na inną. (np. nazwa tymczasowa )
Kliknij katalog główny schematu i kliknij go prawym przyciskiem myszy w przeglądarce obiektów, a następnie kliknij Utwórz nowy schemat i nadaj schematowi nazwę publiczną . Będzie to schemat, na który kopiujesz z kopii zapasowej.
Kliknij prawym przyciskiem myszy nowy schemat publiczny z kroku 5. i kliknij przywróć. Przywróć z pliku kopii zapasowej w kroku 3.
Zmień nazwę nowego schematu na publiczny na inną nazwę (np. Newschema ).
Zmień nazwę tymczasowej zmiany schematu z kroku 4 z powrotem na pierwotną nazwę.
źródło
Możesz użyć
Następnie upuść wszystkie schematy, których nie potrzebujesz:
Jedyną wadą jest to, że wszystkie połączenia ze old_db muszą zostać określone przed utworzeniem kopii (więc proces uruchamiający
CREATE DATABASE
instrukcję musi łączyć się np. Z szablonem 1)Jeśli nie jest to opcja, jedynym sposobem na to jest pg_dump / pg_restore.
źródło
rozwijając odpowiedź user1113185 , oto pełny przepływ pracy przy użyciu psql / pg_dump.
Poniżej eksportuje wszystkie obiekty
old_schema
i importuje je do nowegonew_schema
schematu, asuser
, wdbname
bazie danych:źródło