Существует такая ситуация: мне нужно изменить в целом БД для всех таблиц полого типа данных «временной метка без часового пояса» до «метки времени (0) с временной зоной»Postgres изменения типа массива данных
Я решил создать функцию:
CREATE OR REPLACE FUNCTION grd_replace_datetime_with_timezone()
RETURNS character varying AS
$BODY$
DECLARE
old_column RECORD;
s text;
BEGIN
FOR old_column IN (
SELECT
isc.table_schema as table_schema,
isc.table_name as table_name,
isc.column_name as column_name
FROM
information_schema.columns isc
INNER JOIN
pg_tables pt
ON (isc.table_schema = pt.schemaname and isc.table_name = pt.tablename)
WHERE
isc.column_name like '%date%' and
isc.table_schema in ('public') and
isc.data_type = 'timestamp without time zone'
ORDER BY
isc.table_name ASC
)
LOOP
RAISE NOTICE 'Schema: %',old_column.table_schema;
RAISE NOTICE 'Table: %',old_column.table_name;
RAISE NOTICE 'Column %',old_column.column_name;
EXECUTE 'ALTER TABLE '||old_column.table_schema||'.'||old_column.table_name||'
ALTER COLUMN '||old_column.column_name||' TYPE timestamp(0) with time zone';
RAISE NOTICE '-------------------------------------------------------------------------------';
RAISE NOTICE '';
END LOOP;
RETURN 'S';
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
Но есть проблема: некоторые виды зависят от этих столбцов которым нужно изменить. и получил ошибку:
ERROR: cannot alter type of a column used by a view or rule
также я получил ошибку об индексах.
Любые идеи о том, как изменить тип данных для всех db-систем, где тип данных без часового пояса?
IMHO dump + edit + restore - единственная нормальная вещь. Помимо представлений/правил, есть также ссылки, которые «невидимы» для схемы, такие как функции и триггеры. И: с отдельными -схемами и только -data-дамами, редактирование - это не более чем sed-задание. – wildplasser
@wildplasser: Я согласен, это больше, чем рука, полная объектов, это путь. –
Массовое редактирование - тайный талант DBA!/ g – wildplasser