我有一个表import.hugo
(导入是模式),我需要将所有列数据类型从更改text
为numeric
. 该表已经有数据,所以要改变列(例如)y
我使用这个:
ALTER TABLE import.hugo ALTER COLUMN y TYPE numeric USING (y::numeric);
但是该表有很多列,我不想手动进行。我在这里找到了一些东西并像这样尝试:
do $$
declare
t record;
begin
for t IN select column_name, table_name
from information_schema.columns
where table_name='hugo' AND data_type='text'
loop
execute 'alter table ' || t.table_name || ' alter column ' || t.column_name || ' type numeric';
end loop;
end$$;
当我运行它时,它不起作用,它说:relation "hugo" does not exist
我尝试了这个代码的更多变体,但我无法让它工作。我也不知道,如何实现这部分:(USING (y::numeric);
从第一个命令开始)到这个命令中。
理想情况下,我需要它在一个函数中,用户可以在其中定义一个表的名称,我们在其中更改列数据类型。所以函数像这样调用SELECT function_name(table_name_to_alter_columns);
谢谢。