Привет, Я DocuDroid!
Оценка ИИ поиска
Спасибо за оценку нашего ИИ поиска!
Мы будем признательны, если вы поделитесь своими впечатлениями, чтобы мы могли улучшить наш ИИ поиск для вас и других читателей.
GitHub

ALTER TYPE

Изменяет определение типа данных.

Синтаксис

ALTER TYPE <name> <action> [, ... ]

ALTER TYPE <name> OWNER TO <new_owner>

ALTER TYPE <name> RENAME ATTRIBUTE <attribute_name> TO <new_attribute_name> [ CASCADE | RESTRICT ]

ALTER TYPE <name> RENAME TO <new_name>

ALTER TYPE <name> SET SCHEMA <new_schema>

ALTER TYPE <name> ADD VALUE [ IF NOT EXISTS ] <new_enum_value> [ { BEFORE | AFTER } <existing_enum_value> ]

ALTER TYPE <name> SET DEFAULT ENCODING ( <storage_directive> )

где action может быть одним из:

ADD ATTRIBUTE <attribute_name> <data_type> [ COLLATE <collation> ] [ CASCADE | RESTRICT ]
DROP ATTRIBUTE [ IF EXISTS ] <attribute_name> [ CASCADE | RESTRICT ]
ALTER ATTRIBUTE <attribute_name> [ SET DATA ] TYPE <data_type> [ COLLATE <collation> ] [ CASCADE | RESTRICT ]

где storage_directive может быть следующим:

COMPRESSTYPE={ZLIB | ZSTD | RLE_TYPE | NONE}
COMPRESSLEVEL={0-19}
BLOCKSIZE={8192-2097152}

Описание

ALTER TYPE изменяет определение существующего типа данных. Существует несколько форм:

  • ADD ATTRIBUTE — добавляет новый атрибут к составному типу, используя тот же синтаксис, что и CREATE TYPE.

  • DROP ATTRIBUTE [ IF EXISTS ] — удаляет атрибут из составного типа. Если указано IF EXISTS и атрибут не существует, действие выполняется без ошибки. В этом случае вместо ошибки будет показано уведомление.

  • SET DATA TYPE — изменяет тип атрибута составного типа.

  • OWNER — изменяет владельца типа.

  • RENAME — изменяет имя типа или имя отдельного атрибута составного типа.

  • SET SCHEMA — перемещает тип в другую схему.

  • ADD VALUE [ IF NOT EXISTS ] [ BEFORE | AFTER ] — добавляет новое значение к типу перечисления (enum). Место нового значения в порядке перечисления может быть указано как до (BEFORE), так и после (AFTER) одного из существующих значений. В противном случае новый элемент добавляется в конец списка значений.

    Если указано IF NOT EXISTS, наличие нового значения в типе не вызовет ошибку; будет показано уведомление, но никаких действий предпринято не будет. В противном случае, если новое значение уже существует, возникнет ошибка.

  • CASCADE — автоматически распространяет операцию на типизированные таблицы изменяемого типа и их потомков.

  • RESTRICT — запрещает операцию, если изменяемый тип является типом типизированной таблицы. Это поведение по умолчанию.

Действия ADD ATTRIBUTE, DROP ATTRIBUTE и ALTER ATTRIBUTE могут быть объединены в список из нескольких изменений, применяемых параллельно. Например, можно добавить несколько атрибутов и/или изменить тип нескольких атрибутов в одной команде.

Вы можете изменить имя, владельца и схему типа. Вы также можете добавить или обновить параметры хранения для скалярного типа.

ПРИМЕЧАНИЕ

Greengage DB не поддерживает добавление параметров хранения для строковых или составных типов.

Необходимо быть владельцем типа данных, чтобы использовать ALTER TYPE. Чтобы изменить схему типа, необходимо также иметь привилегию CREATE в новой схеме. Чтобы изменить владельца, необходимо также быть прямым или косвенным членом новой роли владельца, и эта роль должна иметь право CREATE в схеме типа. Эти ограничения гарантируют, что смена владельца не делает ничего, что нельзя было бы сделать путем удаления и повторного создания типа. Однако суперпользователь может изменить владельца любого типа. Чтобы добавить атрибут или изменить тип атрибута, необходимо также иметь привилегию USAGE для этого типа данных.

ALTER TYPE …​ ADD VALUE (форма, добавляющая новое значение к типу перечисления) не может быть выполнена внутри блока транзакции.

Сравнения, включающие добавленное значение перечисления, иногда бывают медленнее, чем сравнения, в которых задействуются только исходные члены типа-перечисления. Обычно это происходит только в том случае, если BEFORE или AFTER используется для установки позиции сортировки нового значения где-то, кроме конца списка. Однако иногда это происходит, даже если новое значение добавляется в конец (это случается, если счетчик OID "переполнился" с момента первоначального создания типа перечисления). Замедление обычно несущественное — если это важно, оптимальную производительность можно восстановить, удалив и создав заново тип перечисления, или выгрузив и перезагрузив базу данных.

Параметры

Параметр Описание

name

Имя (опционально с указанием схемы) существующего типа, который нужно изменить

new_name

Новое имя для типа

new_owner

Имя пользователя нового владельца типа

new_schema

Новая схема для типа

attribute_name

Имя атрибута, который нужно добавить, изменить или удалить

new_attribute_name

Новое имя переименовываемого атрибута

data_type

Тип данных добавляемого атрибута или новый тип изменяемого атрибута

new_enum_value

Новое значение, которое нужно добавить в список значений типа перечисления. Как и все литералы перечисления, оно должно быть заключено в кавычки

existing_enum_value

Существующее значение перечисления, непосредственно до или после которого должно быть добавлено новое значение в порядке сортировки типа перечисления. Как и все литералы перечисления, оно должно быть заключено в кавычки

storage_directive

Определяет параметры хранения по умолчанию для типа, когда он указан в определении столбца таблицы. Опции включают COMPRESSTYPE, COMPRESSLEVEL и BLOCKSIZE.

  • COMPRESSTYPE — установите ZLIB (по умолчанию), ZSTD или RLE_TYPE, чтобы указать тип используемого сжатия.

  • COMPRESSLEVEL — для сжатия Zstd установите целочисленное значение от 1 (самое быстрое сжатие) до 19 (наивысшая степень сжатия). Для сжатия zlib допустимый диапазон составляет от 1 до 9. Для RLE_TYPE уровень сжатия может быть установлен в целочисленное значение от 1 (самое быстрое сжатие) до 6 (наивысшая степень сжатия). Уровень сжатия по умолчанию равен 1.

  • BLOCKSIZE — установите размер в байтах для каждого блока в столбце. BLOCKSIZE должен быть между 8192 и 2097152 байт и быть кратным 8192. Размер блока по умолчанию составляет 32768.

    ПРИМЕЧАНИЕ

    Параметры хранения storage_directives, определенные на уровне таблицы или столбца, переопределяют параметры хранения по умолчанию, определенные для типа.

Примеры

Переименовать тип данных с именем electronic_mail:

ALTER TYPE electronic_mail RENAME TO email;

Изменить владельца пользовательского типа email на joe:

ALTER TYPE email OWNER TO joe;

Изменить схему пользовательского типа email на customers:

ALTER TYPE email SET SCHEMA customers;

Установить или изменить тип сжатия и уровень сжатия пользовательского типа с именем int33:

ALTER TYPE int33 SET DEFAULT ENCODING (compresstype = zlib, compresslevel = 7);

Добавить новый атрибут типу:

ALTER TYPE compfoo ADD ATTRIBUTE f3 int;

Добавить новое значение типу перечисления в определенную позицию сортировки:

ALTER TYPE colors ADD VALUE 'orange' AFTER 'red';

Совместимость

Формы добавления и удаления атрибутов являются частью стандарта SQL. Остальные формы являются расширениями Greengage DB.

См. также