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 数据库:关系不存在的主要内容,如果未能解决你的问题,请参考以下文章
Spring Boot 和 Postgres:关系“sub_comment”不存在
Spring Batch / Postgres:错误:关系“batch_job_instance”不存在
批量插入中的 Postgres 错误:关系“hibernate_sequence”不存在位置 17