Re: Alter domain type / avoiding table rewrite

Поиск
Список
Период
Сортировка
От Ron
Тема Re: Alter domain type / avoiding table rewrite
Дата
Msg-id a3ae8b98-19a4-e612-11e2-aa97c596f4d1@gmail.com
обсуждение исходный текст
Ответ на Re: Alter domain type / avoiding table rewrite  (Adrian Klaver <adrian.klaver@aklaver.com>)
Список pgsql-general
On 4/16/19 9:28 AM, Adrian Klaver wrote:
> On 4/16/19 7:19 AM, Ron wrote:
>> On 4/16/19 4:22 AM, Tim Kane wrote:
>>> So I have a situation where I would like to modify a field that is 
>>> currently a domain type over a varchar(9)
>>>
>>> Specifically:
>>> CREATE DOMAIN old_type AS varchar(9)
>>>
>>> This isn't ideal, let's just say.. legacy.
>>>
>>>
>>> I wish to modify this type.. ideally to a text type with a length 
>>> constraint.. or even just a slightly larger varchar(12) would suffice..
>>>
>>> CREATE DOMAIN new_type AS text;
>>> ALTER DOMAIN new_type ADD CONSTRAINT check_len CHECK ((length(VALUE) <= 
>>> 12)) NOT VALID;
>>>
>>> ALTER TABLE target ALTER
>>> COLUMN value SET DATA TYPE new_type;
>>>
>>>
>>> But it seems impossible to achieve either without a full table rewrite.
>>
>> But the column only has -- at most -- 9 characters of data in it. Won't 
>> the CHECK constraint instantly fail?  (ISTM that you should add the check 
>> constraint AFTER modifying the length and updating your data.)
>>
>
> Not sure how?:
>
> create table check_test (id integer, fld_1 varchar(12));
> CREATE TABLE
> test=> insert into check_test values (1, '123456789'), (2, '');
> INSERT 0 2
>
> test=> select length(fld_1) from check_test ;
>
>  length
>
> --------
>
>       9
>
>       0
>
> (2 rows)
>
> The lengths would be less then or equal to 12.

But there's no CHECK constraint.

>
> Also the NOT VALID will push the check into the future:
>
> https://www.postgresql.org/docs/9.6/sql-altertable.html
>
> "... If the constraint is marked NOT VALID, the potentially-lengthy 
> initial check to verify that all rows in the table satisfy the constraint 
> is skipped. The constraint will still be enforced against subsequent 
> inserts or updates

NOT VALID is the part that obviates my concern.

-- 
Angular momentum makes the world go 'round.



В списке pgsql-general по дате отправления:

Предыдущее
От: Adrian Klaver
Дата:
Сообщение: Re: Alter domain type / avoiding table rewrite
Следующее
От: Ron
Дата:
Сообщение: Re: Alter domain type / avoiding table rewrite