PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Jak w jednej akcji sklonować testową bazę danych z produkcyjnej?

Najprostszą i najszybszą metodą utworzenia pełnej kopii istniejącej (aktywnej) bazy danych jest użycie CREATE DATABASE z TEMPLATE :

CREATE DATABASE mydb_test TEMPLATE mydb;

Istnieje jednak ważne ograniczenie naruszenie drugiego wymagania:baza danych szablonu (źródłowa) nie może mieć do niej dodatkowych połączeń. Cytuję instrukcję:

Możesz zakończyć wszystkie sesje z bazą danych szablonów, jeśli masz niezbędne uprawnienia za pomocą pg_terminate_backend() .
Aby tymczasowo uniemożliwić ponowne połączenia, odwołaj CONNECT przywilej (i GRANT z powrotem później).

REVOKE CONNECT ON DATABASE mydb FROM PUBLIC;

-- while connected to another DB - like the default maintenance DB "postgres"
SELECT pg_terminate_backend(pid)
FROM   pg_stat_activity
WHERE  datname = 'mydb'                    -- name of prospective template db
AND    pid <> pg_backend_pid();            -- don't kill your own session

CREATE DATABASE mydb_test TEMPLATE mydb;

GRANT CONNECT ON DATABASE mydb TO PUBLIC;  -- only if they had it before

W wersjach przed Postgres 9.2 używa procpid zamiast pid :

Powiązane:

Jeśli nie możesz sobie pozwolić na zakończenie jednoczesnych sesji, przejdź do potoku wyjścia pg_dump do psql jak zostało już sugerowane przez inne odpowiedzi.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Przegląd metod JOIN w PostgreSQL

  2. Replikuj środowisko Pythona na innym komputerze

  3. Włączenie niestandardowej klauzuli SELECT w zapytaniu ActiveRecord

  4. Źródło błędu „ nieoczekiwany argument słowa kluczowego „pobierz” ” w pandas to_sql?

  5. przygotowane wypowiedzi za pomocą psycopg