PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Bagaimana cara mengkloning database uji dari produksi satu dalam satu tindakan tunggal?

Metode paling sederhana dan tercepat untuk membuat salinan lengkap dari database (langsung) yang ada adalah dengan menggunakan CREATE DATABASE dengan TEMPLATE :

CREATE DATABASE mydb_test TEMPLATE mydb;

Namun, ada batasan penting melanggar persyaratan kedua Anda:database template (sumber) tidak dapat memiliki koneksi tambahan ke sana. Saya mengutip manualnya:

Anda dapat menghentikan semua sesi ke database template jika Anda memiliki hak istimewa yang diperlukan dengan pg_terminate_backend() .
Untuk sementara melarang koneksi ulang, cabut CONNECT hak istimewa (dan GRANT kembali lagi nanti).

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

Dalam versi sebelum Postgres 9.2 menggunakan procpid bukannya pid :

Terkait:

Jika Anda tidak mampu untuk menghentikan sesi bersamaan, gunakan output dari pg_dump ke psql suka telah disarankan oleh jawaban lain.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Postgres tidak mengembalikan lastval() dengan benar

  2. Tingkatkan PostgreSQL dari 9.6 ke 10.0 di Ubuntu 16.10

  3. Pembaruan postgres dari kiri bergabung

  4. Hasilkan DDL secara terprogram di Postgresql

  5. Memahami cast dari byte ke oid