【发布时间】: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