1

当我执行这个查询时:

CREATE TABLE public.students (
  id INTEGER PRIMARY KEY NOT NULL DEFAULT NEXTVAL('students_id_seq'::regclass),
  first_name CHARACTER VARYING(20) NOT NULL,
  last_name CHARACTER VARYING(20) NOT NULL,
  major CHARACTER VARYING(20) NOT NULL
);
CREATE UNIQUE INDEX "Students_ID_uindex" ON students USING BTREE (id);

SELECT * FROM public.students;

我收到以下错误:

[2016-03-12 22:16:54] Run postgres.public.students [PostgreSQL - postgres@localhost]
[2016-03-12 22:16:54] Connecting TO PostgreSQL - postgres@localhost...
CREATE TABLE public.students (
  id INTEGER PRIMARY KEY NOT NULL DEFAULT NEXTVAL('students_id_seq'::regclass),
  first_name CHARACTER VARYING(20) NOT NULL,
  last_name CHARACTER VARYING(20) NOT NULL,
  major CHARACTER VARYING(20) NOT NULL
)
[2016-03-12 22:16:54] [42P07] ERROR: relation "students" already EXISTS
CREATE UNIQUE INDEX "Students_ID_uindex" ON students USING BTREE (id)
[2016-03-12 22:16:54] [42P07] ERROR: relation "Students_ID_uindex" already EXISTS
SELECT * FROM public.students
[2016-03-12 22:16:54] Executed IN 14ms ms

[2016-03-12 22:16:54] Summary: 3 OF 3 statements executed, 2 failed IN 68ms (338 symbols IN file)

我使用 DataGrip 生成了表格: 在此处输入图像描述

知道我在做什么错吗?

在此处输入图像描述

更新:为了澄清我的问题,当我第一次使用新表名运行代码时,我现在得到错误,但是当我再次运行它时,我得到了上述错误。如何解决这个问题?

在此处输入图像描述

4

2 回答 2

7

您不能创建更多具有相同名称的表 - 因此CREATE如果已经存在具有相同名称的表,则语句应该失败。

您可以在之前运行该语句DROP TABLE- 但请注意!- 它删除了包含所有数据的表,并且无法撤消。第二种选择是IF NOT EXISTSCREATE语句中使用子句:

DROP TABLE IF EXISTS foo;
CREATE TABLE foo(a int);

或者

CREATE TABLE IF NOT EXISTS foo(a int);  
于 2016-03-13T06:55:51.227 回答
0

您不需要使用索引名称,只需允许 PG 自己制作即可:

CREATE INDEX name ON public.students ("id");
于 2020-04-05T01:57:04.850 回答