使用大写字母创建时找不到 postgres 架构

postgres schema not found when create with upper case

我正在尝试使用 OpenJPA 和 Postgres 9 创建应用程序。2.xx,目前在数据库级别面临问题

1) 创建的模式说 PCM:-

CREATE SCHEMA PCM

2) 尝试创建 table :-

CREATE TABLE PCM.USER_PROFILE (
USER_PROFILE_ID BIGINT NOT NULL,
USER_FNAME VARCHAR(60),
USER_LNAME VARCHAR(60)
};

遇到错误"pcm"架构不存在

然后尝试创建 table :-

CREATE TABLE "PCM.USER_PROFILE" (
USER_PROFILE_ID BIGINT NOT NULL,
USER_FNAME VARCHAR(60),
USER_LNAME VARCHAR(60)
};

Table创建成功, 如果我列出架构:-

[postgres@DBMigration ~] $ psql -c "\dn"

  List of schemas
  Name  |  Owner
--------+----------
 pcm    | dbadmin
 public | postgres

B) 在 persistence.xml 中,我输入了配置

<property name="openjpa.jdbc.Schema" value="PCM" />

现在我在 OpenJPA 中遇到问题,指出模式不存在。

我尝试参考 here,但没有成功。

我尝试在配置中输入架构名称 '\"PCM\"', "\"PCM\"", '\"pcm\"', "\"pcm\""

不确定我哪里错了。

我需要suggestion/help, 1) 在 Postgres 中创建架构的正确标准是什么或什么是创建 table.

2) 我在 persistence.xml 中的输入是否正确?那为什么它不识别模式

Postgres 中未引用的对象名称将隐式转换为小写。

当您按照下面在 "PCM.USER_PROFILE" 上使用引号的方式创建 table 时,将在默认 public 架构中创建 table,名称为 "PCM.USER_PROFILE".

CREATE TABLE "PCM.USER_PROFILE" (
  USER_PROFILE_ID BIGINT NOT NULL,
  USER_FNAME VARCHAR(60),
  USER_LNAME VARCHAR(60)
);

但是,您在 post 中提到的创建语句是完全有效的(除了在命令末尾将 } 更改为 ) 之外:

CREATE TABLE PCM.USER_PROFILE (
  USER_PROFILE_ID BIGINT NOT NULL,
  USER_FNAME VARCHAR(60),
  USER_LNAME VARCHAR(60)
);

pcm 模式下成功创建 user_profile table。

我犯的错误是在数据库环境和 root 用户之外创建了架构。当我们在两个用户(root 和 db 用户)下尝试 运行 select * from information_schema.schemata; 时,架构未列出。

因此通过 运行 查询

在数据库下创建模式
psql -U [dbUser] -d [database] -c "CREATE SCHEMA pcm;"

psql -h localhost -U [dbUser] -d [database]
[database]#=>  CREATE SCHEMA pcm;

尝试 运行 查询以测试模式是否在数据库和 dbowner 用户下成功加载。

[database]#=> select * from information_schema.schemata;