Technical validation on altering atttypmod for numeric column in PostgreSQL

From: Mauricio Martini <martini(dot)mauricio(at)hotmail(dot)com>
To: "pgsql-admin(at)lists(dot)postgresql(dot)org" <pgsql-admin(at)lists(dot)postgresql(dot)org>
Subject: Technical validation on altering atttypmod for numeric column in PostgreSQL
Date: 2026-03-23 13:02:42
Message-ID: BN7PR10MB2609BBFDA87D4BBC22ABF14D824BA@BN7PR10MB2609.namprd10.prod.outlook.com
Views: Whole Thread | Raw Message | Download mbox | Resend email
Thread:
Lists: pgsql-admin

Hi team,
I am evaluating an approach to change the scale of a numeric column from numeric(18,2) to numeric(18,4) in a large table, aiming to avoid the cost of a full table rewrite.
The proposed approach involves directly updating the PostgreSQL system catalog:

UPDATE pg_attribute
SET atttypmod = (18 << 16 | 4) + 4
WHERE attrelid = 'table'::regclass
AND attname = 'column';

Before considering this in practice, I would like to validate a few points:

* Is this approach considered safe from a data integrity perspective?
* Is there a risk of inconsistencies in the internal representation of the numeric type (especially regarding scale)?
* Could this impact indexes, functions, or aggregation operations?
* Is there any official recommendation or prior experience using this approach in production environments?
* Are there additional risks related to rollback, maintenance, or future operations (e.g., dump/restore, upgrades)?

The goal is to determine whether this alternative is viable, or if we should stick with more standard approaches (e.g., shadow column, incremental migration, etc.).
If anyone has experience with a similar scenario, your insights would be appreciated.
Thanks.

Att. Mauricio Martini

Responses

Browse pgsql-admin by date

  From Date Subject
Next Message Holger Jakobs 2026-03-23 13:47:52 Re: Technical validation on altering atttypmod for numeric column in PostgreSQL
Previous Message Edwin UY 2026-03-23 05:27:09 Re: Is the resultset from these queries has_table_privilege and information_schema.role_table_grants supposed to match?