Thread: BUG #14346: CREATE TABLE xxx (LIKE yyy INCLUDING ALL) fails

BUG #14346: CREATE TABLE xxx (LIKE yyy INCLUDING ALL) fails

From
mroscio@tin.it
Date:
VGhlIGZvbGxvd2luZyBidWcgaGFzIGJlZW4gbG9nZ2VkIG9uIHRoZSB3ZWJz
aXRlOgoKQnVnIHJlZmVyZW5jZTogICAgICAxNDM0NgpMb2dnZWQgYnk6ICAg
ICAgICAgIE1hc3NpbW8gUm9zY2lvCkVtYWlsIGFkZHJlc3M6ICAgICAgbXJv
c2Npb0B0aW4uaXQKUG9zdGdyZVNRTCB2ZXJzaW9uOiA5LjUuNApPcGVyYXRp
bmcgc3lzdGVtOiAgIFBvc3RncmVTUUwgOS41LjQgb24geDg2XzY0LXBjLWxp
bnV4LWdudSwgY29tcGlsZWQKRGVzY3JpcHRpb246ICAgICAgICAKCnh4eCBp
cyBjcmVhdGVkIHdpdGggYWxsIHJlbGV2YW50IGNvbHVtbnMNCg0KV2hlbiB5
eXkgaGFzIG5vIHByaW1hcnkga2V5cywgYWxsIGNvbnN0cmFpbnRzIGFyZSBk
dWx5IGNyZWF0ZWQgb24geHh4Lg0KDQpXaGVuIHl5eSBoYXMgYSBwcmltYXJ5
IGtleSBuYW1lZCBwa195eXksIGEgcHJpbWFyeSBrZXkgbmFtZWQgeHh4X3Br
ZXkgaXMKY3JlYXRlZCwgYWxsIG90aGVyIGNvbnN0cmFpbnRzIGFyZSBsb3N0
Lg0KDQpQbGVhc2UgZmVlbCBmcmVlIHRvIGFzayBmb3IgbW9yZSBpbmZvcm1h
dGlvbiBpZiBuZWVkZWQuDQoNCnJlZ2FyZHMNCgoK

Re: BUG #14346: CREATE TABLE xxx (LIKE yyy INCLUDING ALL) fails

From
Tom Lane
Date:
mroscio@tin.it writes:
> When yyy has no primary keys, all constraints are duly created on xxx.
> When yyy has a primary key named pk_yyy, a primary key named xxx_pkey is
> created, all other constraints are lost.

Works for me ...

regression=# create table yyy (f1 int constraint pk_yyy primary key, f2 int unique);
CREATE TABLE
regression=# \d yyy
      Table "public.yyy"
 Column |  Type   | Modifiers
--------+---------+-----------
 f1     | integer | not null
 f2     | integer |
Indexes:
    "pk_yyy" PRIMARY KEY, btree (f1)
    "yyy_f2_key" UNIQUE CONSTRAINT, btree (f2)

regression=# create table xxx (like yyy including all);
CREATE TABLE
regression=# \d xxx
      Table "public.xxx"
 Column |  Type   | Modifiers
--------+---------+-----------
 f1     | integer | not null
 f2     | integer |
Indexes:
    "xxx_pkey" PRIMARY KEY, btree (f1)
    "xxx_f2_key" UNIQUE CONSTRAINT, btree (f2)


            regards, tom lane

Re: BUG #14346: CREATE TABLE xxx (LIKE yyy INCLUDING ALL) fails

From
"M. Roscio"
Date:
Thank you for your reply.

I understand that getting the primary key as  xxx_pkey , while I
expected  pk_xxx, is not a bug, it's a feature.

However I insist about foreign keys:  source table is present with 13
rows in information_schema.key_column_usage,
while destination table only has one.

To provide a complete example, I must "sanitize" the names which are
linked to the product I am working on.  It will take some time.

There are ten single-column foreign keys, one three-column foreign key.
Primary key is single-column, numeric, named "oid".

Kind regards
Massimo Roscio


On 29/09/16 14:59, Tom Lane wrote:
> mroscio@tin.it writes:
>> When yyy has no primary keys, all constraints are duly created on xxx.
>> When yyy has a primary key named pk_yyy, a primary key named xxx_pkey is
>> created, all other constraints are lost.
> Works for me ...
>
> regression=# create table yyy (f1 int constraint pk_yyy primary key, f2 int unique);
> CREATE TABLE
> regression=# \d yyy
>        Table "public.yyy"
>   Column |  Type   | Modifiers
> --------+---------+-----------
>   f1     | integer | not null
>   f2     | integer |
> Indexes:
>      "pk_yyy" PRIMARY KEY, btree (f1)
>      "yyy_f2_key" UNIQUE CONSTRAINT, btree (f2)
>
> regression=# create table xxx (like yyy including all);
> CREATE TABLE
> regression=# \d xxx
>        Table "public.xxx"
>   Column |  Type   | Modifiers
> --------+---------+-----------
>   f1     | integer | not null
>   f2     | integer |
> Indexes:
>      "xxx_pkey" PRIMARY KEY, btree (f1)
>      "xxx_f2_key" UNIQUE CONSTRAINT, btree (f2)
>
>
>             regards, tom lane
>

Re: BUG #14346: CREATE TABLE xxx (LIKE yyy INCLUDING ALL) fails

From
Tom Lane
Date:
"M. Roscio" <mroscio@tin.it> writes:
> However I insist about foreign keys:  source table is present with 13
> rows in information_schema.key_column_usage,
> while destination table only has one.

LIKE is not documented as copying foreign key constraints, regardless
of whether there's a primary key or not.  INCLUDING CONSTRAINTS
is specifically stated to control CHECK constraints only.

            regards, tom lane