使用大写创建时找不到postgres模式

时间:2016-08-29 17:00:39

标签: postgresql openjpa

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

1)创建架构说PCM: -

CREATE SCHEMA PCM

2)尝试创建表: -

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

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

然后尝试创建表: -

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

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

[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\""

不知道我哪里错了。

我需要建议/帮助, 1)在Postgres&amp ;;中创建模式的方式或内容是什么?在创建表格时参考。

2)我在persistence.xml中的条目是否正确?那么为什么它没有识别架构

2 个答案:

答案 0 :(得分:1)

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

当您使用"PCM.USER_PROFILE"上的引号创建表格时,表格将以默认public架构创建,名称为"PCM.USER_PROFILE"

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

但是,帖子中提到的您的create语句完全有效(在命令末尾将}更改为)除外:

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

它成功地在user_profile架构下创建pcm表。

答案 1 :(得分:0)

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

因此,通过运行查询

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

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

尝试运行查询以测试架构是否已成功加载到数据库&amp; dbowner用户。

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