我正在尝试使用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中的条目是否正确?那么为什么它没有识别架构
答案 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;