【问题标题】:postgres schema not found when create with upper case使用大写创建时找不到 postgres 架构
【发布时间】:2016-08-29 17:00:39
【问题描述】:

我正在尝试使用 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 中创建模式的正确标准并在创建表时参考。

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

【问题讨论】:

标签: postgresql openjpa


【解决方案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)
);

它在pcm 模式下成功创建user_profile 表。

【讨论】:

  • 感谢您纠正将 } 更改为 ) 的拼写错误。现在我尝试创建表 CREATE TABLE PCM.USER_PROFILE ( USER_PROFILE_ID BIGINT NOT NULL, USER_FNAME VARCHAR(60), USER_LNAME VARCHAR(60) );错误:架构“pcm”不存在
  • 我遵循了您的创建语句,这对我来说一切正常。您确定您的架构存在吗?您是直接从psql 运行这些查询吗?
  • 谢谢卡米尔 G,是的,我错过了这一点。抱歉,我没有看到您的最新评论。
  • @a_horse_with_no_name 我已经添加了关于表名的说明。通过提到架构public,我认为这可能很明显,但实际上 - 它不是。谢谢。
【解决方案2】:

我所做的错误是在数据库环境和 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;

【讨论】:

    猜你喜欢
    • 2017-10-14
    • 1970-01-01
    • 2012-09-21
    • 1970-01-01
    • 2023-01-16
    • 2020-05-26
    • 2018-03-11
    • 2021-10-14
    • 1970-01-01
    相关资源
    最近更新 更多