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

Cara mengembalikan skema publik ke skema yang berbeda

Solusi @Tometzky kurang tepat, setidaknya dengan pg_dump 9.2 . Ini akan membuat tabel dalam skema baru, tetapi pg_dump skema memenuhi syarat ALTER TABLE ... OWNER TO pernyataan, jadi itu akan gagal:

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 | 

Anda juga perlu mengedit dump untuk menghapus kualifikasi skema di public.test atau ubah ke nama skema baru. sed adalah alat yang berguna untuk ini.

Saya berani bersumpah cara yang benar untuk melakukan ini adalah dengan pg_dump -Fc -n public -f dump.dbbackup lalu pg_restore ke dalam skema baru, tapi sepertinya saya tidak tahu persis bagaimana sekarang.

Pembaruan:Tidak, sepertinya sed adalah taruhan terbaik Anda. Lihat Saya ingin memulihkan database dengan skema yang berbeda



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara memvalidasi waktu yang tumpang tindih di Rails dengan postgresql

  2. PostgreSQL, min, maks, dan hitungan tanggal dalam rentang

  3. Bagaimana cara menambahkan 2 poin dengan jarak di antara mereka (SRID =32636)?

  4. Postgresql PADA KONFLIK di sqlalchemy

  5. Saya terus mendapatkan hubungan kesalahan [TABLE] tidak ada