Re: pg_restore error on function - Mailing list pgsql-general

From Adrian Klaver
Subject Re: pg_restore error on function
Date
Msg-id 2f18c2c1-a002-8a0a-bc98-27feb8553050@aklaver.com
Whole thread Raw
In response to Re: pg_restore error on function  (Post Gresql <postgresql@taljaren.se>)
List pgsql-general
On 11/3/22 08:38, Post Gresql wrote:
> 
> On 2022-11-03 15:43, Adrian Klaver wrote:
>> On 11/3/22 07:28, Post Gresql wrote:
>>> Hello
>>>
>>> I first successfully ran
>>>
>>> pg_dump -U postgres -b -E UTF8 -f my_dump --format=custom -n 
>>> my_schema --no-owner -v my_db
>>>
>>> but then
>>>
>>> pg_restore --single-transaction -v -U postgres -O -e -d my_other_db 
>>> my_dump
>>>
>>> failed with
>>>
>>> pg_restore: connecting to database for restore
>>> pg_restore: creating FUNCTION "my_schema.update_b()"
>>> pg_restore: [archiver (db)] Error while PROCESSING TOC:
>>> pg_restore: [archiver (db)] Error from TOC entry 7142; 1255 8618854 
>>> FUNCTION update_b() previous_owner
>>> pg_restore: [archiver (db)] could not execute query: ERROR: schema 
>>> my_schema" does not exist
>>>      Command was: CREATE FUNCTION "my_schema".update_b() RETURNS void
>>>      LANGUAGE plpgsql
>>>      AS $$
>>>              BEGIN
>>>              PERFORM pg_advisory_xact_lock(1);
>>>
>>>              INSERT INTO ...;
>>>              END;
>>>              $$;
>>>
>>>
>>> This is PG version 10.19
>>>
>>> Is there a solution for this (apart from upgrading to a newer PG 
>>> version)?
>>
>> Was there another error before this?
>>
>> Did the -v  show the schema my_schema being created?
> 
> 
> No there were no other output apart from what I showed above.

The -v to pg_restore should output the progress:

https://www.postgresql.org/docs/current/app-pgrestore.html

-v
--verbose

     Specifies verbose mode. This will cause pg_restore to output 
detailed object comments and start/stop times to the output file, and 
progress messages to standard error. Repeating the option causes 
additional debug-level messages to appear on standard error.


Something like:

pg_dump -d test -U postgres -Fc -n test -f test_sch.out

pg_restore -d t -U postgres -v test_sch.out
pg_restore: connecting to database for restore
pg_restore: creating SCHEMA "test"
pg_restore: creating TABLE "test.c2"
pg_restore: creating TABLE "test.supplies"
pg_restore: creating SEQUENCE "test.supplies_id_seq"
pg_restore: creating SEQUENCE OWNED BY "test.supplies_id_seq"
pg_restore: creating TABLE "test.up_test"
pg_restore: creating DEFAULT "test.supplies id"
pg_restore: processing data for table "test.c2"
pg_restore: processing data for table "test.supplies"
pg_restore: processing data for table "test.up_test"
pg_restore: executing SEQUENCE SET supplies_id_seq
pg_restore: creating CONSTRAINT "test.c2 pk1"
pg_restore: creating CONSTRAINT "test.supplies supplies_pkey"

> 
> No, no mention of creating the schema.

As you see the schema was created first.

> 
> 
> Btw. it worked fine when I used plain text output and moved the part of 
> creating the function to near the end of the dump file.
> 
> Could it be that the
> 
> create function  <schema>.<function name>

Well the schema should have already been created.

Assuming this:

pg_restore: connecting to database for restore
pg_restore: creating FUNCTION "my_schema.update_b()"

was not the result of an edit then something is not working correctly.

What is my_schema.update_b() doing?


> 
> in the dump file does not implicitly create the schema as a
> 
> create table <schema>.<table name>
> 
> would?
> 
> 
>>
>>>
>>> The only workaround I can think of is to dump in plain text and then 
>>> edit the dump file.
>>>
>>>
>>

-- 
Adrian Klaver
adrian.klaver@aklaver.com




pgsql-general by date:

Previous
From: "David G. Johnston"
Date:
Subject: Re: pg_restore error on function
Next
From: Tom Lane
Date:
Subject: Re: pg_restore error on function