در این راهنمای جامع، خواهید آموخت که چگونه یک پایگاه داده PostgreSQL را در همان سرور یا از یک سرور به سرور دیگر کپی کنید.
گاهی اوقات نیاز دارید تا یک پایگاه داده PostgreSQL را برای اهداف آزمایش در همان سرور کپی کنید. PostgreSQL این کار را با استفاده از عبارت CREATE DATABASE بسیار آسان کرده است:
CREATE DATABASE targetdb
WITH TEMPLATE sourcedb;
این دستور، پایگاه داده sourcedb را به targetdb کپی میکند. به عنوان مثال، برای کپی کردن پایگاه داده نمونه dvdrental به dvdrental_test، از دستور زیر استفاده کنید:
CREATE DATABASE dvdrental_test
WITH TEMPLATE dvdrental;
بسته به اندازه پایگاه داده منبع، این فرآیند ممکن است کمی زمان ببرد. اگر پایگاه داده dvdrental دارای اتصالات فعال باشد، با خطای زیر مواجه خواهید شد:
ERROR: source database “dvdrental” is being accessed by other users
DETAIL: There is 1 other session using the database.
برای مشاهده اتصالات فعال، از کوئری زیر استفاده کنید:
SELECT pid, usename, client_addr
FROM pg_stat_activity
WHERE datname =’dvdrental’;
برای خاتمه دادن به اتصالات فعال، از کوئری زیر استفاده کنید:
SELECT pg_terminate_backend (pid)
FROM pg_stat_activity
WHERE datname = ‘dvdrental’;
سپس میتوانید دستور CREATE DATABASE WITH TEMPLATE را دوباره اجرا کنید.
کپی پایگاه داده PostgreSQL از یک سرور به سرور دیگر
راههای مختلفی برای کپی کردن پایگاه داده بین سرورهای PostgreSQL وجود دارد. اگر اندازه پایگاه داده بزرگ است و ارتباط بین سرورها کند است، میتوانید از روش زیر استفاده کنید:
pg_dump -U postgres -d sourcedb -f sourcedb.sql
CREATE DATABASE targetdb;
psql -U postgres -d targetdb -f sourcedb.sql
برای کپی کردن پایگاه داده dvdrental از سرور محلی به سرور راه دور، مراحل زیر را دنبال کنید:
pg_dump -U postgres -O dvdrental -f dvdrental.sql
CREATE DATABASE dvdrental;
psql -U postgres -d dvdrental -f dvdrental.sql
اگر ارتباط بین سرورها سریع است و حجم دیتابیس بزرگ نیست، میتوانید از دستور زیر استفاده کنید:
pg_dump -C -h local -U localuser sourcedb | psql -h remote -U remoteuser targetdb
به عنوان مثال، برای کپی کردن پایگاه داده dvdrental از سرور localhost به سرور راه دور، میتوانید دستور زیر را اجرا کنید:
pg_dump -C -h localhost -U postgres dvdrental | psql -h remote -U postgres dvdrental
در این راهنما، نحوه کپی کردن یک پایگاه داده PostgreSQL در همان سرور و همچنین از یک سرور به سرور دیگر را یاد گرفتید.