pg_dump / pgrestore question - cannot restore a single schema
| От | S.Bob | 
|---|---|
| Тема | pg_dump / pgrestore question - cannot restore a single schema | 
| Дата | |
| Msg-id | 5144169d-9913-2261-2ec0-3045679a8477@quadratum-braccas.com обсуждение исходный текст | 
| Ответы | Re: pg_dump / pgrestore question - cannot restore a single schema | 
| Список | pgsql-admin | 
All
I have a question about pg_restore:
I created a database named pgbench
I ran pgbench and created the pgbench tables, then I created 2 new schemas and ran several alter table statements to move the tables into the new schemas. Then I ran another pgbench run into the public schema. The table layout looked like this:
Here are my schemas:
pgbench=# \dn
     List of schemas
     Name    |  Owner   
 ------------+----------
  bench_sch  | postgres
  mytest_sch | postgres
  public     | postgres
 (3 rows)
And the tables:
pgbench=# select schemaname, tablename from pg_tables where schemaname in ('public', 'bench_sch', 'mytest_sch');
  schemaname |    tablename     
 ------------+------------------
  bench_sch  | pgbench_tellers
  mytest_sch | pgbench_accounts
  mytest_sch | pgbench_branches
  mytest_sch | pgbench_history
  public     | pgbench_accounts
  public     | pgbench_branches
  public     | pgbench_history
  public     | pgbench_tellers
 (8 rows)
Then I created a database dump with pg_dump:
$ pg_dump -Fc pgbench > pgbench.Fc.dmp
I can restore the entire db like this and it works as expected:
$ dropdb pgbench
$ createdb pgbench
$ pg_restore -Fc -d pgbench pgbench.Fc.dmp
$ psql pgbench
 psql (12.2)
 Type "help" for help.
 pgbench=# select schemaname, tablename from pg_tables where schemaname in ('public', 'bench_sch', 'mytest_sch');
  schemaname |    tablename     
 ------------+------------------
  bench_sch  | pgbench_tellers
  mytest_sch | pgbench_accounts
  mytest_sch | pgbench_branches
  mytest_sch | pgbench_history
  public     | pgbench_accounts
  public     | pgbench_branches
  public     | pgbench_history
  public     | pgbench_tellers
 (8 rows)
However if I try to restore only one of the schemas it does not work, seems like it does not create the schema first:
$ dropdb pgbench
$ createdb pgbench
$ pg_restore -Fc -d pgbench -n mytest_sch pgbench.Fc.dmp
pg_restore: while PROCESSING TOC:
 pg_restore: from TOC entry 205; 1259 16971 TABLE pgbench_accounts postgres
 pg_restore: error: could not execute query: ERROR:  schema "mytest_sch" does not exist
 LINE 1: CREATE TABLE mytest_sch.pgbench_accounts (
                      ^
 Command was: CREATE TABLE mytest_sch.pgbench_accounts (
     aid integer NOT NULL,
     bid integer,
     abalance integer,
     filler character(84)
 )
 WITH (fillfactor='100');
 pg_restore: error: could not execute query: ERROR:  schema "mytest_sch" does not exist
 Command was: ALTER TABLE mytest_sch.pgbench_accounts OWNER TO postgres;
 pg_restore: from TOC entry 206; 1259 16974 TABLE pgbench_branches postgres
 pg_restore: error: could not execute query: ERROR:  schema "mytest_sch" does not exist
 LINE 1: CREATE TABLE mytest_sch.pgbench_branches (
                      ^
 Command was: CREATE TABLE mytest_sch.pgbench_branches (
     bid integer NOT NULL,
     bbalance integer,
     filler character(88)
 )
 WITH (fillfactor='100');
 pg_restore: error: could not execute query: ERROR:  schema "mytest_sch" does not exist
 Command was: ALTER TABLE mytest_sch.pgbench_branches OWNER TO postgres;
 pg_restore: from TOC entry 207; 1259 16977 TABLE pgbench_history postgres
 pg_restore: error: could not execute query: ERROR:  schema "mytest_sch" does not exist
 LINE 1: CREATE TABLE mytest_sch.pgbench_history (
                      ^
 Command was: CREATE TABLE mytest_sch.pgbench_history (
     tid integer,
     bid integer,
     aid integer,
     delta integer,
     mtime timestamp without time zone,
     filler character(22)
 );
 pg_restore: error: could not execute query: ERROR:  schema "mytest_sch" does not exist
 Command was: ALTER TABLE mytest_sch.pgbench_history OWNER TO postgres;
 pg_restore: from TOC entry 3943; 0 16971 TABLE DATA pgbench_accounts postgres
 pg_restore: error: could not execute query: ERROR:  schema "mytest_sch" does not exist
 Command was: COPY mytest_sch.pgbench_accounts (aid, bid, abalance, filler) FROM stdin;
 pg_restore: from TOC entry 3944; 0 16974 TABLE DATA pgbench_branches postgres
 pg_restore: error: could not execute query: ERROR:  schema "mytest_sch" does not exist
 Command was: COPY mytest_sch.pgbench_branches (bid, bbalance, filler) FROM stdin;
 pg_restore: from TOC entry 3945; 0 16977 TABLE DATA pgbench_history postgres
 pg_restore: error: could not execute query: ERROR:  schema "mytest_sch" does not exist
 Command was: COPY mytest_sch.pgbench_history (tid, bid, aid, delta, mtime, filler) FROM stdin;
 pg_restore: from TOC entry 3807; 2606 16995 CONSTRAINT pgbench_accounts pgbench_accounts_pkey postgres
 pg_restore: error: could not execute query: ERROR:  schema "mytest_sch" does not exist
 Command was: ALTER TABLE ONLY mytest_sch.pgbench_accounts
     ADD CONSTRAINT pgbench_accounts_pkey PRIMARY KEY (aid);
 pg_restore: from TOC entry 3809; 2606 16997 CONSTRAINT pgbench_branches pgbench_branches_pkey postgres
 pg_restore: error: could not execute query: ERROR:  schema "mytest_sch" does not exist
 Command was: ALTER TABLE ONLY mytest_sch.pgbench_branches
     ADD CONSTRAINT pgbench_branches_pkey PRIMARY KEY (bid);
 pg_restore: warning: errors ignored on restore: 11
Thanks in advance for any help...
-- `When you say "I wrote a program that crashed Windows", people just stare at you blankly and say "Hey, I got those with the system, *for free*".' (By Linus Torvalds)
В списке pgsql-admin по дате отправления: