Search Postgresql Archives

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

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Le 6/07/2010 17:17, Tom Lane a écrit :
Arnaud Lesauvage<arnaud.listes@xxxxxxxxx>  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

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


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Postgresql Jobs]     [Postgresql Admin]     [Postgresql Performance]     [Linux Clusters]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Books]     [PHP Databases]     [Postgresql & PHP]     [Yosemite]
  Powered by Linux