原创

Postgresql关键字、驼峰命名问题

关键字问题

例如from to 为mysql关键字,作为字段查询时,必须加引号

SELECT `from`,`to` FROM sc;(适用于mysql)

SELECT "from" ,"to" FROM sc;(适用于mysql和pg)``

某字段使用了函数必须指定别名

在mybatis中返回值为map的时候,取值会出问题。

驼峰法命名的字段问题

creatTime被转成了creattime,看样子pg中全是小写

Caused by: org.postgresql.util.PSQLException: ERROR: column "creattime" does not exist. Perhaps you meant to reference the column "t_bo_topo_count.creatTime".

建议:数据库字段名小写,下划线作为分隔符

深究其原因

  1. PG[数据关键字问题

    例如from to 为mysql关键字,作为字段查询时,必须加引号

    SELECT `from`,`to` FROM sc;(适用于mysql)
    
    SELECT "from" ,"to" FROM sc;(适用于mysql和pg)
    

某字段使用了函数必须指定别名

在mybatis中返回值为map的时候,取值会出问题。

驼峰法命名的字段问题

creatTime被转成了creattime,看样子pg中全是小写

Caused by: org.postgresql.util.PSQLException: ERROR: column "creattime" does not exist. Perhaps you meant to reference the column "t_bo_topo_count.creatTime".
建议:数据库字段名小写,下划线作为分隔符

深究其原因

  1. PG数据库是严格区分大小写的.
  2. 默认情况下,PG数据库会把所有的SQL语句都转化成小写,然后再执行.

说明:加双引号的语句除外.

换句话说,如果想成功执行名称中带有大写字母的对象,则需要把对象名称加上双引号.

验证如下:

数据库中有两个表,分别用全小写命名法(表名:ods.my_table)和驼峰命名法(表名:ods.“MyTable”)创建.

以下两个查询my_table表的SQL都可以正常执行:

select * from ods.my_table;
select * from ods.MY_TABLE –运行时表名会被转化成小写

但是以下执行查询MyTable表的SQL时,报错如下:

select * from ods.MyTable

IMG_256

通过提示可以看出,数据库将表名转化成了ods.mytable,故查询对象不存在.

修改如下,表名加上双引号时,则可以正常执行:

SELECT * from ods.“MyTable”

同样地,通过脚本创建数据库对象时,如果脚本中的对象名称没有加上双引号,则创建之后的对象名称全部会被转化成小写.

但是通过pgAdmin这些可视化管理工具创建数据库对象时,对象名称又不会被转换成小写.

所以为了减少在PG数据库中大小写规则带来的不便,还是建议大家所有的数据库对象都用小写吧.

参考:

关于PostgreSQL数据库的大小写_postgresql_qq844385029-DevPress官方社区

https://huaweicloud.csdn.net/633575dbd3efff3090b57aa8.html

postgresql数据中关键字、驼峰法、别名的坑 - 灰信网(软件开发博客聚合)

https://www.freesion.com/article/5529116964/

正文到此结束