Re: 'default nextval()' loses schema-qualification in dump ?

From: Arnaud Lesauvage <arnaud(dot)listes(at)codata(dot)eu>
To:
Cc: pgsql-odbc(at)postgresql(dot)org, pgsql-general <pgsql-general(at)postgresql(dot)org>
Subject: Re: 'default nextval()' loses schema-qualification in dump ?
Date: 2010-07-07 07:39:02
Message-ID: 4C342F16.1030300@codata.eu
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general pgsql-odbc

Le 6/07/2010 17:17, Tom Lane a écrit :
> Arnaud Lesauvage<arnaud(dot)listes(at)codata(dot)eu> writes:
>> As you have understood, I am not very savvy about postgresql's
>> internals, but from what you say my guess is that the problem is int the
>> psqlODBC is getting the default value of the sequence ?
>
> I have no idea, because you haven't showed us what's happening, only
> your oversimplified description of what's happening. We really need to
> see the exact SQL used to define the table (copy that from your dump,
> perhaps) as well as the exact SQL used in the misbehaving insert
> commands.

OK, here's the SQL.
First the creation of the table :

CREATE TABLE myschema.mytable
(
gid serial NOT NULL,
data character varying(255),
CONSTRAINT pkey_mytable PRIMARY KEY (gid)
);

Then the dump :

SET statement_timeout = 0;
SET client_encoding = 'LATIN9';
SET standard_conforming_strings = off;
SET check_function_bodies = false;
SET client_min_messages = warning;
SET escape_string_warning = off;
SET search_path = myschema, pg_catalog;
SET default_tablespace = '';
SET default_with_oids = false;
CREATE TABLE mytable (
gid integer NOT NULL,
data character varying(255)
);
ALTER TABLE myschema.mytable OWNER TO postgres;
CREATE SEQUENCE mytable_gid_seq
START WITH 1
INCREMENT BY 1
NO MAXVALUE
NO MINVALUE
CACHE 1;
ALTER TABLE myschema.mytable_gid_seq OWNER TO postgres;
ALTER SEQUENCE mytable_gid_seq OWNED BY mytable.gid;
ALTER TABLE mytable ALTER COLUMN gid SET DEFAULT
nextval('mytable_gid_seq'::regclass);
ALTER TABLE ONLY mytable
ADD CONSTRAINT pkey_mytable PRIMARY KEY (gid);

The tables are linked via PsqlODBC with the following options :
TrueIsMinus1=1
BoolsAsChar=0
TextAsLongVarchar=1
Protocol=7.4-1
AB=0x2
Rowversionning=1
CommLog=1

The PsqlODBC log for the insert before the dump/restore (i.e. the good
one) :

[0.063]conn=095C4198, query='SELECT "myschema"."mytable"."gid" FROM
"myschema"."mytable" '
[0.063] [ fetched 0 rows ]
[9.125]conn=095C4198, query='INSERT INTO "myschema"."mytable" ("data")
VALUES (E'somedata')'
[9.125]conn=095C4198, query='select n.nspname, c.relname, a.attname,
a.atttypid, t.typname, a.attnum, a.attlen, a.atttypmod, a.attnotnull,
c.relhasrules, c.relkind, c.oid, d.adsrc, case t.typtype when 'd' then
t.typbasetype else 0 end, t.typtypmod from (((pg_catalog.pg_class c
inner join pg_catalog.pg_namespace n on n.oid = c.relnamespace and
c.relname = E'mytable' and n.nspname = E'myschema') inner join
pg_catalog.pg_attribute a on (not a.attisdropped) and a.attnum > 0 and
a.attrelid = c.oid) inner join pg_catalog.pg_type t on t.oid =
a.atttypid) left outer join pg_attrdef d on a.atthasdef and d.adrelid =
a.attrelid and d.adnum = a.attnum order by n.nspname, c.relname, attnum'
[9.141] [ fetched 2 rows ]
[9.141]PGAPI_Columns: table='mytable',field_name='gid',type=23,name='int4'
[9.141]PGAPI_Columns:
table='mytable',field_name='data',type=1043,name='varchar'
[9.141]conn=095C4198, query='SELECT
currval('myschema.mytable_gid_seq'::regclass)'
[9.141] [ fetched 1 rows ]
[9.141]conn=095C4198, query='COMMIT'
[9.141]conn=095C4198, query='SELECT "gid","data" FROM
"myschema"."mytable" WHERE "gid" = 1'
[9.141] [ fetched 1 rows ]

The PsqlODBC log for the insert after the dump/restore (i.e. the bad one) :

[11.328]conn=09FC0048, query='SELECT "myschema"."mytable"."gid" FROM
"myschema"."mytable" '
[11.328] [ fetched 0 rows ]
[15.438]conn=09FC0048, query='INSERT INTO "myschema"."mytable" ("data")
VALUES (E'somedata')'
[15.438]conn=09FC0048, query='select n.nspname, c.relname, a.attname,
a.atttypid, t.typname, a.attnum, a.attlen, a.atttypmod, a.attnotnull,
c.relhasrules, c.relkind, c.oid, d.adsrc, case t.typtype when 'd' then
t.typbasetype else 0 end, t.typtypmod from (((pg_catalog.pg_class c
inner join pg_catalog.pg_namespace n on n.oid = c.relnamespace and
c.relname = E'mytable' and n.nspname = E'myschema') inner join
pg_catalog.pg_attribute a on (not a.attisdropped) and a.attnum > 0 and
a.attrelid = c.oid) inner join pg_catalog.pg_type t on t.oid =
a.atttypid) left outer join pg_attrdef d on a.atthasdef and d.adrelid =
a.attrelid and d.adnum = a.attnum order by n.nspname, c.relname, attnum'
[15.453] [ fetched 2 rows ]
[15.453]PGAPI_Columns: table='mytable',field_name='gid',type=23,name='int4'
[15.453]PGAPI_Columns:
table='mytable',field_name='data',type=1043,name='varchar'
[15.453]conn=09FC0048, query='SELECT currval('mytable_gid_seq'::regclass)'
[15.453]ERROR from backend during send_query: 'SERREUR'
[15.453]ERROR from backend during send_query: 'C42P01'
[15.453]ERROR from backend during send_query: 'Mla relation «
mytable_gid_seq » n'existe pas'
[15.453]ERROR from backend during send_query: 'P16'
[15.453]ERROR from backend during send_query:
'F.\src\backend\catalog\namespace.c'
[15.453]ERROR from backend during send_query: 'L276'
[15.453]ERROR from backend during send_query: 'RRangeVarGetRelid'
[15.453]STATEMENT ERROR: func=SC_execute, desc='(null)', errnum=7,
errmsg='Error while executing the query'
[15.453] ------------------------------------------------------------
[15.453] hdbc=09FC0048, stmt=095CB3E0, result=095C94F0
[15.453] prepare=2, internal=0
[15.469] bindings=00000000, bindings_allocated=0
[15.469] parameters=00000000, parameters_allocated=0
[15.469] statement_type=0, statement='SELECT @@IDENTITY'
[15.469] stmt_with_params='SELECT
currval('mytable_gid_seq'::regclass)'
[15.469] data_at_exec=-1, current_exec_param=-1, put_data=0
[15.469] currTuple=-1, current_col=-1, lobj_fd=-1
[15.469] maxRows=0, rowset_size=1, keyset_size=0,
cursor_type=0, scroll_concurrency=1
[15.469] cursor_name='SQL_CUR095CB3E0'
[15.469] ----------------QResult Info
-------------------------------
[15.469] fields=09FC2F58, backend_tuples=00000000,
tupleField=0, conn=00000000
[15.469] fetch_count=0, num_total_rows=0, num_fields=0,
cursor='(NULL)'
[15.469] message='ERREUR: la relation « mytable_gid_seq
» n'existe pas', command='(NULL)', notice='(NULL)'
[15.469] status=7, inTuples=0
[15.469]CONN ERROR: func=SC_execute, desc='(null)', errnum=110,
errmsg='ERREUR: la relation « mytable_gid_seq » n'existe pas'
[15.469] ------------------------------------------------------------
[15.469] henv=095C2138, conn=09FC0048, status=1, num_stmts=16
[15.469] sock=09FC3540, stmts=09FC3030, lobj_type=-999
[15.469] ---------------- Socket Info
-------------------------------
[15.469] socket=172, reverse=0, errornumber=0, errormsg='(NULL)'
[15.469] buffer_in=157064440, buffer_out=157072160
[15.485] buffer_filled_in=6, buffer_filled_out=0,
buffer_read_in=6
[15.485]conn=09FC0048, query='ROLLBACK'

Is this enough ? The log was quite big so I removed the parts I thought
were not useful, but if you need more information from the log (or from
elsewhere), just says so.

Thanks !
Regards
Arnaud Lesauvage

In response to

Browse pgsql-general by date

  From Date Subject
Next Message Richard Huxton 2010-07-07 07:41:25 Re: 'default nextval()' loses schema-qualification in dump ?
Previous Message Arnaud Lesauvage 2010-07-07 06:47:52 Re: 'default nextval()' loses schema-qualification in dump ?

Browse pgsql-odbc by date

  From Date Subject
Next Message Richard Huxton 2010-07-07 07:41:25 Re: 'default nextval()' loses schema-qualification in dump ?
Previous Message Arnaud Lesauvage 2010-07-07 06:47:52 Re: 'default nextval()' loses schema-qualification in dump ?