BUG #12259: Bug in restore Serial definition

Started by Michał Lisover 11 years ago2 messagesbugs
Jump to latest
#1Michał Lis
fcs1@poczta.onet.pl

The following bug has been logged on the website:

Bug reference: 12259
Logged by: Michal
Email address: fcs1@poczta.onet.pl
PostgreSQL version: 9.1.14
Operating system: Windows 7 x64 Ultimate
Description:

Hello,

I have two schemas: public and blob01.
In blob01 schema I have only one table "blob" with primary index ID defined
as
nextval('blob01.osr_blob_id_seq'::regclass)

After restoring by PG_restore the definition is changed to
nextval('osr_blob_id_seq'::regclass), the schema definition is dropped.
Due to this the sequence is not accessible because it is in blob01 schema,
not in public schema.

How to restore blob01 saving schema for definition the ID field ?

Regards
Michal

--
Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-bugs

#2Tom Lane
tgl@sss.pgh.pa.us
In reply to: Michał Lis (#1)
Re: BUG #12259: Bug in restore Serial definition

fcs1@poczta.onet.pl writes:

I have two schemas: public and blob01.
In blob01 schema I have only one table "blob" with primary index ID defined
as
nextval('blob01.osr_blob_id_seq'::regclass)

After restoring by PG_restore the definition is changed to
nextval('osr_blob_id_seq'::regclass), the schema definition is dropped.
Due to this the sequence is not accessible because it is in blob01 schema,
not in public schema.

This report doesn't prove there's anything wrong. A regclass constant is
not ordinarily displayed with a schema unless the target object wouldn't
be found in the current search path. For example:

regression=# create schema blob01;
CREATE SCHEMA
regression=# create sequence blob01.osr_blob_id_seq;
CREATE SEQUENCE
regression=# create table blob01.blob(f1 int default nextval('blob01.osr_blob_id_seq'));
CREATE TABLE
regression=# \d blob01.blob
Table "blob01.blob"
Column | Type | Modifiers
--------+---------+-----------------------------------------------------
f1 | integer | default nextval('blob01.osr_blob_id_seq'::regclass)

regression=# set search_path = blob01;
SET
regression=# \d blob01.blob
Table "blob01.blob"
Column | Type | Modifiers
--------+---------+----------------------------------------------
f1 | integer | default nextval('osr_blob_id_seq'::regclass)

When I pg_dump this, I get output like

SET search_path = blob01, pg_catalog;

--
-- Name: osr_blob_id_seq; Type: SEQUENCE; Schema: blob01; Owner: postgres
--

CREATE SEQUENCE osr_blob_id_seq
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1;

ALTER TABLE osr_blob_id_seq OWNER TO postgres;

--
-- Name: blob; Type: TABLE; Schema: blob01; Owner: postgres; Tablespace:
--

CREATE TABLE blob (
f1 integer DEFAULT nextval('osr_blob_id_seq'::regclass)
);

ALTER TABLE blob OWNER TO postgres;

which will work just fine because of the search_path setting.

There may indeed be some bug in this vicinity, but you'll need to provide
a complete self-contained test case to prove it.

regards, tom lane

--
Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-bugs