| From: | PG Bug reporting form <noreply(at)postgresql(dot)org> |
|---|---|
| To: | pgsql-bugs(at)lists(dot)postgresql(dot)org |
| Cc: | zheng_xianghang(at)163(dot)com |
| Subject: | BUG #19446: Domain DEFAULT not reflected in system catalogs and information_schema (PG 18.3) |
| Date: | 2026-03-30 03:12:10 |
| Message-ID: | 19446-c2e092abdbf0216e@postgresql.org |
| Views: | Whole Thread | Raw Message | Download mbox | Resend email |
| Thread: | |
| Lists: | pgsql-bugs |
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)
| From | Date | Subject | |
|---|---|---|---|
| Next Message | Xuneng Zhou | 2026-03-30 03:14:19 | Re: BUG #19439: pg_stat_xact_user_tables stat not currect during the transaction |
| Previous Message | PG Bug reporting form | 2026-03-30 03:11:35 | BUG #19445: Domain DEFAULT not recorded in pg_attrdef (atthasdef false) in PostgreSQL 18.3 |