Подтвердить что ты не робот

Изменение типа данных столбца в Amazon Redshift

Как изменить тип данных столбца в базе данных Amazon Redshift?

Я не могу изменить тип данных столбца в Redshift; есть ли способ изменить тип данных в Amazon Redshift?

4b9b3361

Ответ 1

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

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

Используйте код, подобный следующему:

ALTER TABLE t1 ADD COLUMN new_column ___correct_column_type___;
UPDATE t1 SET new_column = column;
ALTER TABLE t1 DROP COLUMN column;
ALTER TABLE t1 RENAME COLUMN new_column TO column;

Произойдет изменение схемы - добавленный столбец будет последним в таблице (что может быть проблемой с оператором COPY, имейте это в виду - вы можете определить порядок столбцов с помощью COPY)

Ответ 2

чтобы избежать изменения схемы, упомянутого Томашем:

BEGIN TRANSACTION;

ALTER TABLE <TABLE_NAME> RENAME TO <TABLE_NAME>_OLD;
CREATE TABLE <TABLE_NAME> ( <NEW_COLUMN_DEFINITION> );
INSERT INTO <TABLE_NAME> (<NEW_COLUMN_DEFINITION>)
SELECT <COLUMNS>
FROM <TABLE_NAME>_OLD;
DROP TABLE <TABLE_NAME>_OLD;

END TRANSACTION;

Ответ 3

Последнее обновление (по состоянию на 15 марта 2019 г.) Redshift

  1. позволяет изменять столбцы ТОЛЬКО типов varchar.
  2. Вы можете только увеличить длину поля. Вы не можете уменьшить его.
  3. Столбец Alter нельзя запустить внутри блока транзакции. (До свидания скрипты миграции)

Из документации, https://docs.aws.amazon.com/redshift/latest/dg/r_ALTER_TABLE.html

ALTER COLUMN column_name TYPE new_data_type

Предложение, которое изменяет размер столбца, определенного как тип данных VARCHAR. Примите во внимание следующие ограничения:

  • Вы не можете изменить столбец с помощью кодировок сжатия BYTEDICT, RUNLENGTH, TEXT255 или TEXT32K.
  • Вы не можете уменьшить размер меньше максимального размера существующих данных.
  • Вы не можете изменять столбцы со значениями по умолчанию.
  • Вы не можете изменять столбцы с помощью UNIQUE, PRIMARY KEY или FOREIGN KEY.
  • Вы не можете изменять столбцы внутри блока с несколькими выражениями (BEGIN... END).

Ответ 4

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

CREATE TEMP TABLE temp_table AS SELECT * FROM original_table;
DROP TABLE original_table;
CREATE TABLE original_table ...
INSERT INTO original_table SELECT * FROM temp_table;

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

Ответ 5

ALTER TABLE publisher_catalogs ADD COLUMN new_version integer;

update publisher_catalogs set new_version = CAST(version AS integer);
ALTER TABLE publisher_catalogs DROP COLUMN version RESTRICT;
ALTER TABLE publisher_catalogs RENAME new_version to version;

Ответ 6

(Недавнее обновление) Возможно изменить тип столбцов varchar в Redshift.

ALTER COLUMN column_name TYPE new_data_type

Пример:

CREATE TABLE t1 (c1 varchar(100))

ALTER TABLE t1 ALTER COLUMN c1 TYPE varchar(200)

Вот ссылка на документацию link

Ответ 7

Redshift, являющийся колоночной базой данных, не позволяет вам напрямую изменять тип данных, однако ниже приведен один из подходов, который изменит порядок столбцов.

Шаги -

1.Alter table добавить newcolumn в таблицу 2. Обновите значение newcolumn значением oldcolumn 3.Alter table, чтобы удалить таблицу oldcolumn 4.alter, чтобы переименовать columnn в oldcolumn

Если вы не хотите изменять порядок столбцов, то решение будет

1. создать временную таблицу с новым именем столбца

  1. скопировать данные из старой таблицы в новую таблицу.

  2. уронить старый стол

  3. переименовать newtable в oldtable

  4. Одна важная вещь - создать новую таблицу, используя команду like вместо простого create.

Ответ 8

Этот метод работает для преобразования (большого) столбца int в varchar

-- Create a backup of the original table
create table original_table_backup as select * from original_table;

-- Drop the original table, and then recreate with new desired data types
drop table original_table;

create table original_table (
  col1 bigint,
  col2 varchar(20) -- changed from bigint
);

-- insert original entries back into the new table
insert into original_table select * from original_table_backup;

-- cleanup
drop original_table_backup;

Ответ 9

для обновления того же столбца в красном смещении это будет работать нормально

UPDATE table_name 
SET column_name = 'new_value' WHERE column_name = 'old_value'

Вы можете иметь несколько предложений в где с помощью и, чтобы устранить путаницу для SQL

ура !!