微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

改变表中所有列的数据类型 (PostgreSQL 13)

如何解决改变表中所有列的数据类型 (PostgreSQL 13)

我有一个import.hugo(导入是架构),我需要将所有列的数据类型从 text 更改为 numeric。该表已经有数据,因此要更改列(例如)y 我使用这个:

ALTER TABLE import.hugo ALTER COLUMN y TYPE numeric USING (y::numeric); 

但是表格有很多列,我不想手动完成。 我找到了一些东西 here 并像这样尝试:

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);

谢谢。

解决方法

table_name 中选择 information_schema.columns 是不够的,因为 import 架构不在您的 search path 中。您可以通过将 import 附加到 search_path 中显示的任何内容,将 import 架构添加到您的 SHOW search_path,或者您可以将 table_schema 列添加到您的 { {1}} 块:

DO

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。