postgresql中将所有的char改为varchar类型

在将Postgresql数据转换为Neo4j的过程中,char类型的字段的在转换成Neo4j的属性后会带有空格。比如char(10)字段的数据为helloNeo4j属性中则会带有空格,虽然可以在查询的时候加上trim函数,但这样对于原来的查询代码改动太大。所以决定从源头将这个问题解决。 假如有一个字段为char(10)如果插入的数据长度未达到10,关系型数据库默认在后面添加空格,所以将char类型改为varchar可以解决这个问题。 在char类型改为varchar的过程中,会默认把char类型中的空格给去掉。 在postgresql中有一个表information_schema.columns记录了所有字段的信息,所以可以从这个表中提取信息进行charvarchar的转换。

# 这个语句会生成将char改为varchar的sql语句
SELECT CONCAT('alter table ', table_schema, '.', table_name, ' alter column ', column_name, ' type ', 'varchar ', '(',character_maxinum_length,');') from information_schema.columns where table_catalog='ptl' and date_type='character';

information_schema.columns中的常用字段。

字段 描述
table_catalog 数据库名
table_schema 数据库的schema
table_name 表名
column_name 字段名
data_type 数据类型
character_maximum_length 如果类型为character或bit string type,则为可存储最大字符数

Ref:
1.information_schema.columns