| From: | Junwang Zhao <zhjwpku(at)gmail(dot)com> |
|---|---|
| To: | zheng_xianghang(at)163(dot)com, pgsql-bugs(at)lists(dot)postgresql(dot)org |
| Subject: | Re: BUG #19446: Domain DEFAULT not reflected in system catalogs and information_schema (PG 18.3) |
| Date: | 2026-03-30 15:00:08 |
| Message-ID: | CAEG8a3+n0GgeJYG5qOFsLY_txKVX8CE5TE_5oE2d0+SjQ9+DzQ@mail.gmail.com |
| Views: | Whole Thread | Raw Message | Download mbox | Resend email |
| Thread: | |
| Lists: | pgsql-bugs |
On Mon, Mar 30, 2026 at 7:52 PM PG Bug reporting form
<noreply(at)postgresql(dot)org> wrote:
>
> The following bug has been logged on the website:
>
> Bug reference: 19446
> Logged by: Xianghang Zheng
> Email address: zheng_xianghang(at)163(dot)com
> PostgreSQL version: 18.3
> Operating system: Linux x86_64
> Description:
>
> 1. PostgreSQL Version
> PostgreSQL 18.3 (x86_64)
> 2. Operating System
> Linux x86_64
> 3. Problem Description
> When a column uses a domain with DEFAULT value, all system catalogs fail to
> reflect the default:
> - pg_attribute.atthasdef = false
> - No entries in pg_attrdef
> - information_schema.columns.column_default is empty
> But the default value works correctly at runtime.
> This is a metadata bug.
> 4. Steps to Reproduce
> CREATE DOMAIN info_domain AS int DEFAULT 100;
> CREATE TABLE t (col info_domain);
> SELECT attname, atthasdef
> FROM pg_attribute
> WHERE attrelid = 't'::regclass AND attnum > 0;
> SELECT * FROM pg_attrdef WHERE adrelid = 't'::regclass;
> SELECT column_name, column_default
> FROM information_schema.columns
> WHERE table_name = 't' AND column_name = 'col';
> INSERT INTO t DEFAULT VALUES;
> SELECT * FROM t;
> 5. Actual Result
> - atthasdef = f
> - pg_attrdef returns empty
> - column_default is empty
> - But the default value 100 works
> 6. Expected Result
> System catalogs should show the domain's DEFAULT correctly.
> 7. Test Output
> postgres=# CREATE DOMAIN info_domain AS int DEFAULT 100;
> CREATE DOMAIN
> postgres=# CREATE TABLE t (col info_domain);
> CREATE TABLE
> postgres=# SELECT attname, atthasdef FROM pg_attribute WHERE attrelid =
> 't'::regclass AND attnum > 0;
> attname | atthasdef
> ---------+-----------
> col | f
> (1 row)
> postgres=# SELECT * FROM pg_attrdef WHERE adrelid = 't'::regclass;
> oid | adrelid | adnum | adbin
> -----+---------+-------+-------
> (0 rows)
> postgres=# SELECT column_name, column_default FROM
> information_schema.columns WHERE table_name = 't' AND column_name = 'col';
> column_name | column_default
> -------------+----------------
> col |
> (1 row)
> postgres=# INSERT INTO t DEFAULT VALUES;
> INSERT 0 1
> postgres=# SELECT * FROM t;
> col
> -----
> 100
> (1 row)
>
>
>
>
Same as your report of bug #19445, this should be by design.
--
Regards
Junwang Zhao
| From | Date | Subject | |
|---|---|---|---|
| Next Message | Tom Lane | 2026-03-30 16:29:20 | Re: BUG #19438: segfault with temp_file_limit inside cursor |
| Previous Message | Junwang Zhao | 2026-03-30 14:56:55 | Re: BUG #19445: Domain DEFAULT not recorded in pg_attrdef (atthasdef false) in PostgreSQL 18.3 |