【问题标题】:Postgres database: relation does not existPostgres 数据库:关系不存在
【发布时间】: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

标签: java spring postgresql docker-compose flyway


【解决方案1】:

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

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

示例:

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

【讨论】:

  • 我尝试使用该注释指定架构,但是当我运行应用程序“架构不存在”时总是遇到同样的问题
  • 我假设您检查了迁移执行。你能添加你的日志吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-09-16
  • 1970-01-01
  • 2019-08-02
  • 2020-04-09
  • 2018-12-02
  • 1970-01-01
  • 2018-05-15
相关资源
最近更新 更多