agora inbox for pgsql-sql@postgresql.org  
help / color / mirror / Atom feed
From: Sebastien FLAESCH <sf@4js.com>
To: pgsql-sql@postgresql.org
Subject: Re: TRUNCATE TABLE corrupts pg_class.relfilenode = pg_attrdef.pg_attrdef
Date: Mon, 22 May 2017 13:07:46 +0200
Message-ID: <291ca3cf-79af-c161-4213-182c35e43fe6@4js.com> (raw)
In-Reply-To: <66def74b-633e-65a0-cf44-4d486f15ebd9@4js.com>
References: <66def74b-633e-65a0-cf44-4d486f15ebd9@4js.com>
List-Unsubscribe: <mailto:majordomo@postgresql.org?body=unsub%20pgsql-sql>

Seems that the correct join condition should be:

     (pg_class.oid = pg_attrdef.adrelid)

I don't know why we have used pg_class.relfilenode...

So this should be the correct SELECT statement:

test1=> select a.adsrc from pg_class p join pg_attrdef a on (p.oid = a.adrelid) where lower(p.relname) = lower('mytab');
                 adsrc
-------------------------------------
  nextval('mytab_pkey_seq'::regclass)
(1 row)


Can someone confirm?

Thanks!
Seb


On 05/22/2017 12:51 PM, Sebastien FLAESCH wrote:
> Hi all,
>
> Testing with Postgresql 9.6rc1 (but also detected with prior versions):
>
> It is normal that a TRUNCATE TABLE statement changes the table/sequence relation in pg_attrdef?
>
> test1=> create table mytab ( pkey serial, name varchar(10) );
> test1=> select a.adsrc from pg_class p join pg_attrdef a on (p.relfilenode = a.adrelid) where lower(p.relname) = lower('mytab');
>                 adsrc
> -------------------------------------
>  nextval('mytab_pkey_seq'::regclass)
> (1 row)
>
> test1=> truncate table mytab;
> TRUNCATE TABLE
> test1=> select a.adsrc from pg_class p join pg_attrdef a on (p.relfilenode = a.adrelid) where lower(p.relname) = lower('mytab');
>  adsrc
> -------
> (0 rows)
>
> test1=> select adrelid, adsrc from pg_attrdef where adsrc like '%mytab%';
>  adrelid |                adsrc
> ---------+-------------------------------------
>  6904163 | nextval('mytab_pkey_seq'::regclass)
> (1 row)
>
>
> Are we mis-using the condition (p.relfilenode = a.adrelid) in the first SELECT?
>
> How can we easily check if a table is defined with a SERIAL type?
>
> Thanks!
> Seb
>
>



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



view thread (5+ messages)  latest in thread

Message-ID: <291ca3cf-79af-c161-4213-182c35e43fe6@4js.com>
Permalink:  ../291ca3cf-79af-c161-4213-182c35e43fe6@4js.com/
Also on:    postgresql.org/message-id/291ca3cf-79af-c161-4213-182c35e43fe6@4js.com

reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: pgsql-sql@postgresql.org
  Cc: sf@4js.com
  Subject: Re: TRUNCATE TABLE corrupts pg_class.relfilenode = pg_attrdef.pg_attrdef
  In-Reply-To: <291ca3cf-79af-c161-4213-182c35e43fe6@4js.com>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by agora; see mirroring instructions
for how to clone and mirror all data and code used for this inbox