Я изучаю PostgreSQL и пытаюсь создать функцию для ИЗМЕНЕНИЯ типов данных данной таблицы, которая имеет столбцы с типом данных character varying
.
Для этого я создал курсор, который в основном запрашивает столбцы information_schema.columns в поисках таблиц, содержащих столбцы с типом character varying
, чтобы позже выполнить изменение и попытаться изменить столбец на text
, так что это поле не ограничено длиной Значение.
Вот функция:
CREATE OR REPLACE FUNCTION my_cursor(db_name TEXT, tbl_schema TEXT, tbl_name TEXT, col_type TEXT) RETURNS void AS $func$
DECLARE
cid record;
BEGIN
FOR cid IN SELECT * FROM information_schema.columns AS ic
WHERE ic.table_catalog=db_name
AND ic.table_schema=tbl_schema
AND ic.table_name=tbl_name
AND ic.data_type=col_type
LOOP
EXECUTE format('ALTER TABLE %I.%I ALTER COLUMN %I TYPE text', cid.table_schema, cid.table_name, cid.column_name);
END LOOP;
RETURN;
END;
$func$ LANGUAGE plpgsql;
SELECT my_cursor('database10232016', 'public', 'continent', 'character varying');
Функция компилируется и создается успешно, однако после запуска функции я заметил, что изменение не работает с указанным именем таблицы.
Можете ли вы помочь мне определить, что пошло не так с моим курсором?