|
Автогенерируемые столбцы наследуются как обычные негенерируемые
|
|||
---|---|---|---|
#18+
PostgreSQL 13 https://postgrespro.ru/docs/postgresql/13/ddl-inherit Отношение наследования между таблицами обычно устанавливается при создании дочерней таблицы с использованием предложения INHERITS оператора CREATE TABLE. Другой способ добавить такое отношение для таблицы, определённой подходящим образом — использовать INHERIT с оператором ALTER TABLE. Для этого будущая дочерняя таблица должна уже включать те же столбцы (с совпадающими именами и типами), что и родительская таблица. Также она должна включать аналогичные ограничения-проверки (с теми же именами и выражениями). Удалить отношение наследования можно с помощью указания NO INHERIT оператора ALTER TABLE. Динамическое добавление и удаление отношений наследования может быть полезно при реализации секционирования таблиц.Имеется базовая таблица с автогенерируемым столбцом . В дочерней таблице наследуемые столбцы можно создать двумя способами: 1 ) при создании дочерней таблицы с указанием INHERITE base_table . 2 ) в уже созданной дочерней таблице путём добавления всех наследуемых полей с теми же именами, типами и ограничениями (NULL + CHECK) и выполнения ALTER TABLE child_table INHERITE base_table . Проблема в том, что во втором случае автогенерируемый столбец наследуется как обычный (негенерируемый) столбец. Тогда как в первом случае он наследуется корректно - как автогенерируемый. Вопросы : 1 ) Как во втором случае корректно унаследовать автогенерируемый столбец ? 2 ) Как в уже созданной таблице изменить выражение генерации значения автогенерируемого столбца без его пересоздания ? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2020, 16:00 |
|
Автогенерируемые столбцы наследуются как обычные негенерируемые
|
|||
---|---|---|---|
#18+
Судя по всему, проблема №1 является следствием проблемы №2... ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2020, 16:38 |
|
Автогенерируемые столбцы наследуются как обычные негенерируемые
|
|||
---|---|---|---|
#18+
Cyrax_02, Если я правильно понял вопрос, то что мешает создать в наследуемой таблице для поля отвечающего за автогенерацию умолчательное заполнение по сиквенсу созданному для базовой таблицы. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2020, 17:23 |
|
Автогенерируемые столбцы наследуются как обычные негенерируемые
|
|||
---|---|---|---|
#18+
Cyrax_02 Судя по всему, проблема №1 является следствием проблемы №2... автогенерируемые это default nextval или честные https://www.postgresql.org/docs/13/ddl-generated-columns.html ? вообще приведите test case подскажу может как обойти я без него не соображу пока что именно не срабатывает. -- Maxim Boguk лучшая поддержка PostgreSQL: dataegret.ru ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2020, 18:41 |
|
Автогенерируемые столбцы наследуются как обычные негенерируемые
|
|||
---|---|---|---|
#18+
big-trot Cyrax_02, Если я правильно понял вопрос, то что мешает создать в наследуемой таблице для поля отвечающего за автогенерацию умолчательное заполнение по сиквенсу созданному для базовой таблицы. Так в PostgreSQL ещё и наследование последовательностей не работает ? Maxim Boguk вообще приведите test case подскажу может как обойти я без него не соображу пока что именно не срабатывает. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
P.S . Плюс остаётся в силе вопрос №2: > 2) Как в уже созданной таблице изменить выражение для вычисления значения генерируемого столбца без его пересоздания ? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2020, 01:27 |
|
Автогенерируемые столбцы наследуются как обычные негенерируемые
|
|||
---|---|---|---|
#18+
Написал в -hackers, по-видимому недосмотрели в коде добавления уже существующей таблицы в наследование. Я бы предположил что Код: sql 1. 2.
станет невозможным после исправления (добавления проверки там где сейчас её нет, вернее сказать). Генерируемые поля необходимо будет объявить с аналогичным вычисляемым выражением. Как в уже созданной таблице изменить выражение для вычисления значения генерируемого столбца без его пересоздания ? На данный момент никак. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2020, 13:46 |
|
Автогенерируемые столбцы наследуются как обычные негенерируемые
|
|||
---|---|---|---|
#18+
авторстанет невозможным после исправления (добавления проверки там где сейчас её нет, вернее сказать). Генерируемые поля необходимо будет объявить с аналогичным вычисляемым выражением.Это не проблема. Главное - чтобы столбец стал генерируемым после установления наследования. И чтобы выражение генерации производной таблицы менялось вместе с выражением генерации базовой таблицы (если будет добавлена возможность изменения такого выражения). ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2020, 14:05 |
|
Автогенерируемые столбцы наследуются как обычные негенерируемые
|
|||
---|---|---|---|
#18+
Было бы гораздо удобнее и логичнее, если наследование FK и индексов (построенных исключительно на наследуемых столбцах) было реализовано на опциональном уровне. Здесь возникают два вопроса: 1 ) Если CHECK-ограничения на поле наследуются, то почему не наследуются внешние ключи ? ( причина X , которая противоречит логике Y ) 2 ) Если не наследуются внешние ключи, тогда почему наследуются CHECK-ограничения на поле ? ( причина Y , которая противоречит логике X ) А коли так, то получается нехорошо... ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2020, 01:20 |
|
|
start [/forum/topic.php?fid=53&msg=40017316&tid=1994376]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
145ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
55ms |
get tp. blocked users: |
2ms |
others: | 15ms |
total: | 260ms |
0 / 0 |