使用大写字母创建时找不到 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;
我正在尝试使用 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;