PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Cách khôi phục lược đồ công khai thành lược đồ khác

Giải pháp của @ Tometzky không hoàn toàn đúng, ít nhất là với pg_dump của 9.2 . Nó sẽ tạo bảng trong lược đồ mới, nhưng pg_dump schema-đủ điều kiện cho ALTER TABLE ... OWNER TO các câu lệnh, vì vậy những câu lệnh đó sẽ không thành công:

postgres=# CREATE DATABASE demo;
\cCREATE DATABASE
postgres=# \c demo
You are now connected to database "demo" as user "postgres".
demo=# CREATE TABLE public.test ( dummy text );
CREATE TABLE
demo=# \d
        List of relations
 Schema | Name | Type  |  Owner   
--------+------+-------+----------
 public | test | table | postgres
(1 row)
demo=# \q
$
$ pg_dump -U postgres -f demo.sql demo
$ sed -i 's/^SET search_path = public, pg_catalog;$/SET search_path = testschema, pg_catalog;/' demo.sql
$ grep testschema demo.sql 
SET search_path = testschema, pg_catalog;
$ dropdb -U postgres demo
$ createdb -U postgres demo
$ psql -U postgres -c 'CREATE SCHEMA testschema;' demo
CREATE SCHEMA
$ psql -U postgres -f demo.sql -v ON_ERROR_STOP=1 -v QUIET=1 demo
psql:demo.sql:40: ERROR:  relation "public.test" does not exist
$ psql demo
demo=> \d testschema.test 
  Table "testschema.test"
 Column | Type | Modifiers 
--------+------+-----------
 dummy  | text | 

Bạn cũng sẽ cần phải chỉnh sửa kết xuất để xóa tiêu chuẩn giản đồ trên public.test hoặc thay đổi nó thành tên lược đồ mới. sed là một công cụ hữu ích cho việc này.

Tôi có thể thề rằng cách chính xác để làm điều này là với pg_dump -Fc -n public -f dump.dbbackup rồi đến pg_restore vào một lược đồ mới, nhưng tôi dường như không thể tìm ra chính xác cách thức ngay bây giờ.

Cập nhật:Không, có vẻ như sed là đặt cược tốt nhất của bạn. Xem Tôi muốn khôi phục cơ sở dữ liệu bằng một giản đồ khác



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Đặt lại trình tự trong jpa

  2. PostgreSQL Tạo chỉ mục

  3. Hàm Escape cho biểu thức chính quy hoặc các mẫu LIKE

  4. Làm cách nào để lấy dữ liệu cục bộ vào cơ sở dữ liệu chỉ đọc bằng dplyr?

  5. Bash Script để cài đặt PostgreSQL - Không hoạt động