Postgres Изменить таблицу для преобразования типа столбца из char в bigint
Возможный дубликат:
как изменить тип столбца столбца от символа до числового в postgresql 8.4
Если у меня есть поле типа varchar (и все значения являются нулевыми или строковыми представлениями чисел), как использовать таблицу alter для преобразования этого типа столбца в bigint?
Ответы
Ответ 1
Для преобразования просто путем разбора строки (кастинг):
alter table the_table alter column the_column type bigint using the_column::bigint
Фактически вы можете использовать любое выражение в терминах the_column
вместо the_column::bigint
для настройки преобразования.
Обратите внимание, что это перепишет таблицу, заблокировав даже читателей до ее завершения.
Ответ 2
Вы можете создать временный столбец типа bigint
, а затем выполнить SQL как
UPDATE my_table SET bigint_column=varchar_column::bigint;
Затем оставьте свой varchar_column и переименуйте bigint_column. Это своего рода кольцевая разметка, но не требует специального приведения в postgres.
Ответ 3
Как преобразовать тип столбца строки в числовой или bigint в postgresql
Создайте свой собственный заказ из строки в bigint. Что-то вроде этого:
CREATE OR REPLACE FUNCTION convert_to_bigint(v_input text)
RETURNS BIGINT AS $$
DECLARE v_bigint_value BIGINT DEFAULT NULL;
BEGIN
BEGIN
v_bigint_value := v_input::BIGINT;
EXCEPTION WHEN OTHERS THEN
RAISE NOTICE 'Invalid bigint value: "%". Returning something else.', v_input;
RETURN 0;
END;
RETURN v_bigint_value;
END;
Затем создайте новую таблицу fixed_table_with_bigint
с теми же параметрами, что и для старой таблицы, за исключением изменения столбца строки в столбце bigint.
Затем вставьте все строки из предыдущей таблицы (используя пользовательский листинг convert_to_integer
) в новую таблицу:
insert into fixed_table_with_bigint
select mycolumn1,
convert_to_bigint(your_string_bigint_column),
mycolumn3
from incorrect_table
Возможно, вам придется изменить convert_to_bigint
, чтобы обрабатывать строки, которые не являются номерами, пустыми строками, нулями, управляющими символами и другой странностью.
Затем удалите первую таблицу и переименуйте вторую таблицу в качестве первой таблицы.