PostgreSql 统一修改date字段为timestamp

        在《Powdersigner + PostgreSql 同步表结构到pg数据库》中,导入表结构到pg数据后,发下时间对不上了。mysql的datetime转换后pg的变成了date了。 再同步到数据后,就变成日期类型了。  因为表中基本都有创建时间和修改时间,两个相对固定的字段,因此想做一个统一的处理。

        把《postgreSql使用||拼接sql实现一次性修改库里面所有字段的属性_pg修改字段属性_友妖气的博客-CSDN博客》 和《Postgresql 如何查出一个表/所有表的所有列名_iteapoy的博客-CSDN博客》重新做一个梳理

        《Postgresql学习文档

1,查出当前库里面的表格字段:

 -- 所有表字段
select * from information_schema.columns;

-- 只查公共的表字段
select * from information_schema.columns 
where table_schema='public' and table_name<>'pg_stat_statements';

2,根据类型过滤字段:

select * from information_schema.columns 
where table_schema='public' and table_name<>'pg_stat_statements' 
and data_type = 'date';

3,pg修改字段类型:

ALTER TABLE table_name ALTER COLUMN column_name DATA TYPE datatype;

4,拼接要修改表名和字段

SELECT 'ALTER table '||table_name||' alter COLUMN '|| column_name ||
' SET DATA TYPE timestamp ;' FROM information_schema.columns
where table_schema='public' and table_name<>'pg_stat_statements' 
 and data_type = 'date' 
  order by table_name ;

执行后,得到修改类型的语句,可以导出来,再执行。 

5,再拼接到一起array_to_string

不导出来的话,可以再拼接,

 select array_to_string(array_agg(sqls), ' ') from (
  SELECT 'ALTER table '||table_name||' alter COLUMN '||column_name||
' SET DATA TYPE timestamp ;' as sqls
  FROM information_schema.columns
  where table_schema='public' 
  and table_name<>'pg_stat_statements' 
  and data_type = 'date' 
  order by table_name 
 ) as temp;

再把内容复制出来,格式化下,再执行。

注意:

        如果时间是有用date类型的,再根据字段名称进行一个过滤,特殊话处理!

总结:

        如果有碰到需要统一修改固定表字段类型的,可以用这样的方法去处理,比较省事。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天狼1222

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值