Postgres 数据库:关系不存在

Posted

技术标签:

【中文标题】Postgres 数据库:关系不存在【英文标题】:Postgres database: relation does not exist 【发布时间】:2021-01-13 06:54:08 【问题描述】:

我是 Postgres 的新手。我通过 flyway 迁移运行以下脚本:

V1.0__Create_Service_Users.sql

DO
$do$
BEGIN
    IF NOT EXISTS(SELECT FROM pg_catalog.pg_roles WHERE  rolname = '$MYSERVICE_USERNAME') THEN
        create role $MYSERVICE_USERNAME WITH LOGIN NOSUPERUSER NOINHERIT NOCREATEDB NOCREATEROLE NOREPLICATION PASSWORD '$MYSERVICE_PASSWORD';
    END IF;
END
$do$

V1.1__Create_Schema.sql

create schema if not exists $SCHEMA_PREFIX;

V1.2__Grant_Permissions_To_Users.sql

grant usage on all sequences in schema $SCHEMA_PREFIX to $MYSERVICE_USERNAME;
alter default privileges in schema $SCHEMA_PREFIX grant SELECT, INSERT, UPDATE, DELETE on tables to $MYSERVICE_USERNAME;

最后:V2.1__Create_Images.Table.sql

CREATE TABLE $SCHEMA_PREFIX.images
(
    id          SERIAL primary key,
    name varchar(250) NOT NULL,
    link        varchar(250) NOT NULL,
    width       int          NOT NULL,
    height      int          NOT NULL,
    unique (name, link)
);

当我尝试运行应用程序时,它会产生以下错误: 关系“图片”不存在 这里也是数据库模型:

@Entity
@Table(name = "images")
@EntityListeners(AuditingEntityListener.class)
public class ImagesDBO implements Serializable 

  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  @Column(name = "id", nullable = false)
  private Long id;

  @Column(name = "name", nullable = false)
  private String name;

  @Column(name = "link", nullable = false)
  private String link;

  @Column(name = "width", nullable = false)
  private Integer width;

  @Column(name = "height", nullable = false)
  private Integer height;

在所有示例中,我都可以找到有人收到错误声明关系不存在的地方,这是因为他们在表名中使用了大写字母。我的表名没有大写字母。 我很善良,无法弄清楚为什么该表不存在!有人可以帮帮我吗? 谢谢。

【问题讨论】:

我没用过spring,但想必你可能需要在@Table注解中指定架构? 我认为没有必要,但即使我在该注释中指定了架构,我也收到了同样的错误 尝试alter role $MYSERVICE_USERNAME set search_path = '$SCHEMA_PREFIX, public'; 将新创建的架构包含在search path中 【参考方案1】:

这个错误是由hibernates或flyway提供的吗?

您是否尝试使用 @Table 指定架构:

示例:

@Entity
@Table(name = "author", schema = "bookstore")
public class ImagesDBO  ... 

【讨论】:

我尝试使用该注释指定架构,但是当我运行应用程序“架构不存在”时总是遇到同样的问题 我假设您检查了迁移执行。你能添加你的日志吗?

以上是关于Postgres 数据库:关系不存在的主要内容,如果未能解决你的问题,请参考以下文章

关系不存在 - Django & Postgres

Spring Boot 和 Postgres:关系“sub_comment”不存在

Spring Batch / Postgres:错误:关系“batch_job_instance”不存在

批量插入中的 Postgres 错误:关系“hibernate_sequence”不存在位置 17

Django.db.utils.ProgramingError 关系不存在

Heroku postgres 关系“information_schema.session_state”不存在