Search Postgresql Archives

How to change NUMERIC type under a domain without rewriting a table?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hello!

In the following setup:

DROP DOMAIN IF EXISTS uint64 CASCADE;
DROP TABLE IF EXISTS demo;

CREATE DOMAIN uint64 AS NUMERIC(20, 0);
CREATE TABLE demo(key uint64);
INSERT INTO demo SELECT g FROM generate_series(1, 10000000) g;

I would like to change the type of "key" column to NUMERIC(40, 0).
When I run,

ALTER TABLE demo ALTER COLUMN key TYPE NUMERIC(40, 0);

the whole table gets rewritten. Due to the table size it's not an option in my case.
But, if there was no domain in the middle, and the column type was NUMERIC(20, 0), the command above would complete in-place without rewriting any rows.
I attempted to modify the definition uint64 in pg_type table:

UPDATE pg_type SET typtypmod = 2621444 WHERE typname = 'uint64';

It seems to work. Is it safe? Does it have any unintended consequences?
Or maybe there is another way to achieve this?

--
Marcin Barczyński

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Postgresql Jobs]     [Postgresql Admin]     [Postgresql Performance]     [Linux Clusters]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Databases]     [Postgresql & PHP]     [Yosemite]

  Powered by Linux