Thread: BUG #18393: Bad multiple "inplace" insert into domain of complex type

BUG #18393: Bad multiple "inplace" insert into domain of complex type

From
PG Bug reporting form
Date:
The following bug has been logged on the website:

Bug reference:      18393
Logged by:          Pablo Kharo
Email address:      pashaharkov@yandex.ru
PostgreSQL version: 16.2
Operating system:   Mac OS 14.1
Description:

Hi, i have found strange thing when was using domain of complex type.

When i was using insert like this to domain of type:
```
CREATE TYPE user_tp AS (
    uid          TEXT,
    email        text,
    timestamp TIMESTAMP
);

create domain user_domain as public.user_tp;

CREATE TABLE comps_tb (
    id      SERIAL PRIMARY KEY,
    us      user_domain NOT NULL
);

insert into public.comps_tb 
(
    us.uid,
    us.email
)
values 
(
    '213'::TEXT, 
    'email'::TEXT
),
(
    '321'::TEXT, 
    'email2'::TEXT
);

select 
    id,
    (us).uid,
    (us).email 
from 
    public.comps_tb;
```

I have output like this:
id|uid    |email     |
--+-------+----------+
 1|(213,,)|(,email,) |
 2|(321,,)|(,email2,)|

But i expecting 
id|uid    |email     |
--+-------+----------+
 1|213|email |
 2|321|email2|


So, it has created additional brackets in uid and email. BUT if i inserting
into this table only one element, it inserts without additional brackets. 
Also additional brackets are not creating when i am using complex type
itself - not domain,


PG Bug reporting form <noreply@postgresql.org> writes:
> Hi, i have found strange thing when was using domain of complex type.

Yeah, that looks pretty broken.  It works correctly if you just
use the composite type directly, but not with the domain.
I'll go look for the cause in a bit.  Thanks for the report!

            regards, tom lane