sql - Postgres 创建表错误

标签 sql postgresql

我正尝试在 postgres 中创建我的第一个表,但是当我执行此 SQL 时:

create table public.automated_group_msg (
  automated_group_msg_idx integer NOT NULL DEFAULT nextval ('automated_group_msg_idx'::regclass),
  group_idx integer NOT NULL,
  template_idx integer NOT NULL,
  CONSTRAINT automated_group_msg_pkey PRIMARY KEY (automated_group_msg_idx),
  CONSTRAINT automated_group_msg_group_idx_fkey FOREIGN KEY (group_idx)
  REFERENCES public.groups (group_idx) MATCH SIMPLE
  ON UPDATE CASCADE ON DELETE CASCADE,
  CONSTRAINT automated_msg_template_idx_fkey FOREIGN KEY (template_idx)
  REFERENCES public.template (template_idx) MATCH SIMPLE
  ON UPDATE CASCADE ON DELETE CASCADE
)
WITH (
OIDS = FALSE
);

我收到以下错误:

ERROR: relation "automated_group_msg_idx" does not exist

最佳答案

您的错误(可能)是因为您尝试使用的序列尚不存在。

但是您可以使用以下语法即时创建序列:

create table public.automated_group_msg (
  id serial primary key,
  ... -- other columns
)

与您的问题没有直接关系,但是在列名称中使用表名命名列通常是一种反模式,特别是对于 id 是行业标准的主键。它还允许使用 id 列始终为 id 的抽象类重构应用程序代码。 automated_group_msg.id 的含义非常清楚,而且 automated_group_msg.automated_group_msg_id 是一个火车残骸,包含冗余信息。出于同样的原因,customer.birth_date 等属性列名称也不应过度修饰为 customer.customer_birth_date

关于sql - Postgres 创建表错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47143790/

相关文章:

javascript - 如何将 Postgresql timestamptz 转换为 Javascript 日期?

ruby-on-rails - 用于查找丢失的外键的 Rails 插件

sql - 删除前触发 Firebird

MySQL语法错误: where not exists

sql - 无需先在另一个表中查找值即可执行 SQL 插入

PostgreSQL 给我 "connection refused"即使 "listen_addresses = ' *'"

从属性文件 Autowiring Springboot Postgresql 数据源

sql - SORT 的成本正在减慢我的查询

c# - 防止 SQL 重复预订

sql - 当一个行的结束时间是另一个行的开始时间时合并行 (Oracle)