Обсуждение: BUG #12259: Bug in restore Serial definition

Поиск
Список
Период
Сортировка

BUG #12259: Bug in restore Serial definition

От
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

Re: BUG #12259: Bug in restore Serial definition

От
Tom Lane
Дата:
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