迁移 Oracle 到 PostgreSQL: 标识符区分大小写

七月 28, 2023

对于 Oracle 和 PostgreSQL,对象名称区分大小写的行为是不同的。Oracle 名称默认以大写形式存储,不区分大小写。PostgreSQL 名称默认以小写形式存储,区分大小写。

默认情况下,PostgreSQL 会自动使用小写的对象名称。在大多数情况下,在将原来 Oracle 的对象转换到 PostgreSQL 时,模式、表和列名称存储形式会变更为小写。

若要以大写形式存储对象名称,必须将对象名称放在双引号内。

例如,要在 PostgreSQL 中创建一个名为EMPLOYEES(大写)的表,您应该使用以下形式的语句:

CREATE TABLE "EMPLOYEES" (
  EMP_ID NUMERIC PRIMARY KEY,
  EMP_FULL_NAME VARCHAR(60) NOT NULL,
  AVG_SALARY NUMERIC NOT NULL);

以下命令会创建一个名为 employees(小写)的表。

CREATE TABLE EMPLOYEES (
  EMP_ID NUMERIC PRIMARY KEY,
  EMP_FULL_NAME VARCHAR(60) NOT NULL,
  AVG_SALARY NUMERIC NOT NULL);

如果不使用双引号,PostgreSQL 会以小写形式查找对象名称。对于不使用双引号的CREATE命令,PostgreSQL 会创建具有小写名称的对象。因此,若要创建、查询或操作大写形式(或混合形式)的对象名称,请使用双引号。