2013-10-08 2 views
2

У меня есть таблица A(colmn1 varchar(10),column2 varchar2(20));преобразования VarChar dataype в текст [] массив

, но мне нужно, чтобы преобразовать datatype varchar в text[] array

table A(column1 text[],column2 text[]) 

скажите, пожалуйста, как изменить этот столбцы таблицы

+0

Вы можете upvote для вашего правильный ответ. –

ответ

1

К преобразуйте колонку в другой тип данных, используйте следующую команду:

ALTER TABLE TableName ALTER COLUMN ColumnName TYPE text[] Using array[ColumnName];; 

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

PostgreSQL попытается преобразовать значение по умолчанию столбца (если оно есть) в новый тип, а также любые ограничения, связанные с столбцом. Но эти преобразования могут потерпеть неудачу или могут привести к неожиданным результатам. Часто лучше всего отбрасывать любые ограничения на столбец, прежде чем изменять его тип, а затем впоследствии добавлять обратно соответствующим образом измененные ограничения.

+0

при выполнении, чтобы он выдавал ошибку, как это. Укажите выражение USING для выполнения преобразования. – user2793872

+0

это не работает .... – user2793872

+0

Я обновил свой пост, но я видел, что у вас есть ответ, отправленный @mu слишком короткий –

3

Там нет неявной литая, который превратит ваш varchar в text[] так что вам необходимо определить, как преобразование должно быть сделано с USING clause:

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

Что-то простое, как это следует сделать трюк:

alter table A alter column column1 type text[] using array[column1]; 

Аналогично для другого столбца.

+0

спасибо .... его работа – user2793872

1

Вы действительно хотите текст [] ??? 'text' может сохранить строку. вам не нужен текст [].

postgresql doc как ниже

Кроме того, PostgreSQL предоставляет тип текста, который хранит строки любой длины. Хотя текст типа не соответствует стандарту SQL, в нем также используется несколько других систем управления базами данных SQL.

так что вы просто введите ниже

ALTER TABLE TableName ALTER COLUMN ColumnName TYPE text; 
1

Это работает, и это также гарантирует, что вы не создавать ценности, которые являются массивы с нулевым элементом в.

ALTER TABLE myTable ALTER COLUMN myColumn TYPE varchar[] USING CASE WHEN myColumn IS null THEN null ELSE array[myColumn] END; 
Смежные вопросы