From: | Philippe BEAUDOIN <phb(dot)emaj(at)free(dot)fr> |
---|---|
To: | pgsql-general(at)postgresql(dot)org |
Subject: | pg_dumping extensions having sequences with 9.6beta3 |
Date: | 2016-07-22 09:27:15 |
Message-ID: | 84567acb-2cdb-10d1-92ab-6af60df5610f@free.fr |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-general pgsql-hackers |
Hi all,
I am currently playing with extensions. And I found a strange behaviour
change with 9.6beta2 and 3 when pg_dumping a database with an extension
having sequences. This looks like a bug, ... unless I did something wrong.
Here is a test case (a simple linux shell script, that can be easily
customized to reproduce).
# pg_dump issue in postgres 9.6beta2 when dumping sequences linked to
extensions
#
export PGBIN="/usr/local/pg96beta3/bin"
#export PGBIN="/usr/local/pg952/bin"
export EXTDIR="/tmp"
export PGDIR="/usr/local/pg96beta3/share/postgresql/extension"
#export PGDIR="/usr/local/pg952/share/postgresql/extension"
export PGPORT=5496
#export PGPORT=5495
export PGDATABASE='postgres'
echo
"##################################################################################################################"
echo " "
echo "psql: prepare the initial environment: 1 schema + 2 tables with 1
serial column in each"
echo
"---------------------------------------------------------------------------------------"
$PGBIN/psql -a <<*END*
select version();
-- cleanup
DROP EXTENSION IF EXISTS myextension;
DROP SCHEMA IF EXISTS myextension CASCADE;
-- create
CREATE SCHEMA myextension;
CREATE TABLE myextension.t1 (c1 SERIAL);
CREATE TABLE myextension.t2 (c1 SERIAL);
*END*
echo "create first files for extension management"
echo "-------------------------------------------"
cat >$EXTDIR/myextension.control <<*END*
default_version = '1'
comment = 'test'
directory = '$EXTDIR'
superuser = true
schema = 'myextension'
relocatable = false
*END*
sudo ln -s $EXTDIR/myextension.control $PGDIR/myextension.control
cat >$EXTDIR/myextension--unpackaged--1.sql <<*END*
-- for t1, the table and the sequence is added to the extension
ALTER EXTENSION myextension ADD TABLE myextension.t1;
ALTER EXTENSION myextension ADD SEQUENCE myextension.t1_c1_seq;
-- for t2, the associated sequence is not added to the extension for now
ALTER EXTENSION myextension ADD TABLE myextension.t2;
-- create a new t3 table
CREATE TABLE t3 (c1 SERIAL);
*END*
echo "psql: create the extension from unpackaged"
echo "------------------------------------------"
$PGBIN/psql -a <<*END*
-- create
CREATE EXTENSION myextension FROM unpackaged;
-- check
\dx
SELECT classid, c1.relname, objid, c2.relname, c2.relkind, refclassid,
r.relname, refobjid
FROM pg_depend, pg_class c1, pg_class r, pg_class c2
WHERE deptype = 'e'
AND classid = c1.oid AND refclassid = r.oid AND objid = c2.oid
AND c1.relname = 'pg_class';
*END*
echo " "
echo "So we now have 3 tables having a serial column:"
echo " - t1 explicitely added to the extension, with its sequence"
echo " - t2 explicitely added to the extension, but without its sequence"
echo " - t3 directly created inside the extensione"
echo " "
echo "sequences dumped by pg_dump (pg_dump |grep 'CREATE SEQUENCE')"
echo "---------------------------"
$PGBIN/pg_dump |grep 'CREATE SEQUENCE'
echo " "
echo "=> as expected, with latest minor versions of postgres 9.1 to 9.5,
the sequences associated to the t1.c1 and t1.c3 columns are not dumped,"
echo " while the sequence associated to t2.c1 is dumped."
echo "=> with 9.6beta3 (as with beta2), the 3 sequences are dumped."
echo " "
echo "cleanup"
echo "-------"
$PGBIN/psql <<*END*
DROP EXTENSION IF EXISTS myextension;
DROP SCHEMA IF EXISTS myextension CASCADE;
*END*
sudo rm $PGDIR/myextension.control
rm $EXTDIR/myextension*
And its output result:
##################################################################################################################
psql: prepare the initial environment: 1 schema + 2 tables with 1 serial
column in each
---------------------------------------------------------------------------------------
select version();
version
---------------------------------------------------------------------------------------------------------
PostgreSQL 9.6beta3 on i686-pc-linux-gnu, compiled by gcc (Ubuntu
4.8.4-2ubuntu1~14.04.3) 4.8.4, 32-bit
(1 row)
-- cleanup
DROP EXTENSION IF EXISTS myextension;
NOTICE: extension "myextension" does not exist, skipping
DROP EXTENSION
DROP SCHEMA IF EXISTS myextension CASCADE;
NOTICE: schema "myextension" does not exist, skipping
DROP SCHEMA
-- create
CREATE SCHEMA myextension;
CREATE SCHEMA
CREATE TABLE myextension.t1 (c1 SERIAL);
CREATE TABLE
CREATE TABLE myextension.t2 (c1 SERIAL);
CREATE TABLE
create first files for extension management
-------------------------------------------
psql: create the extension from unpackaged
------------------------------------------
-- create
CREATE EXTENSION myextension FROM unpackaged;
CREATE EXTENSION
-- check
\dx
List of installed extensions
Name | Version | Schema | Description
-------------+---------+-------------+------------------------------
myextension | 1 | myextension | test
plpgsql | 1.0 | pg_catalog | PL/pgSQL procedural language
(2 rows)
SELECT classid, c1.relname, objid, c2.relname, c2.relkind, refclassid,
r.relname, refobjid
FROM pg_depend, pg_class c1, pg_class r, pg_class c2
WHERE deptype = 'e'
AND classid = c1.oid AND refclassid = r.oid AND objid = c2.oid
AND c1.relname = 'pg_class';
classid | relname | objid | relname | relkind | refclassid |
relname | refobjid
---------+----------+-------+-----------+---------+------------+--------------+----------
1259 | pg_class | 32216 | t1 | r | 3079 | pg_extension
| 32226
1259 | pg_class | 32214 | t1_c1_seq | S | 3079 | pg_extension
| 32226
1259 | pg_class | 32222 | t2 | r | 3079 | pg_extension
| 32226
1259 | pg_class | 32227 | t3_c1_seq | S | 3079 | pg_extension
| 32226
1259 | pg_class | 32229 | t3 | r | 3079 | pg_extension
| 32226
(5 rows)
So we now have 3 tables having a serial column:
- t1 explicitely added to the extension, with its sequence
- t2 explicitely added to the extension, but without its sequence
- t3 directly created inside the extensione
sequences dumped by pg_dump (pg_dump |grep 'CREATE SEQUENCE')
---------------------------
CREATE SEQUENCE t1_c1_seq
CREATE SEQUENCE t2_c1_seq
CREATE SEQUENCE t3_c1_seq
=> as expected, with latest minor versions of postgres 9.1 to 9.5, the
sequences associated to the t1.c1 and t1.c3 columns are not dumped,
while the sequence associated to t2.c1 is dumped.
=> with 9.6beta3 (as with beta2), the 3 sequences are dumped.
cleanup
-------
DROP EXTENSION
DROP SCHEMA
I will be off during the 2 coming weeks. So I will only see any reply to
this thread ... soon.
Best regards.
Philippe Beaudoin.
From | Date | Subject | |
---|---|---|---|
Next Message | Alex Ignatov | 2016-07-22 11:14:24 | Re: pg_dump without any SET command in header of output plain text sql file |
Previous Message | Attacker One | 2016-07-22 08:35:11 | d88a45e680327e0b22a34020d8f78252 - Re: MongoDB 3.2 beating Postgres 9.5.1? |
From | Date | Subject | |
---|---|---|---|
Next Message | Mithun Cy | 2016-07-22 10:02:20 | Cache Hash Index meta page. |
Previous Message | Andres Freund | 2016-07-22 09:01:25 | Re: freeze map open item |