gpt4 book ai didi

PostgreSQL "if not exists"总是抛出语法错误

转载 作者:行者123 更新时间:2023-12-05 03:49:51 25 4
gpt4 key购买 nike

我正在尝试运行这个:

IF NOT EXISTS (
SELECT FROM information_schema.tables
WHERE table_schema = 'topgun' AND table_name = 'session'
)

THEN

CREATE TABLE topgun.session (
sid varchar NOT NULL COLLATE "default",
sess json NOT NULL,
expire timestamp(6) NOT NULL
) WITH (OIDS=FALSE);
ALTER TABLE topgun.session ADD CONSTRAINT "session_pkey" PRIMARY KEY ("sid") NOT DEFERRABLE INITIALLY IMMEDIATE;
CREATE INDEX "IDX_session_expire" ON topgun.session ("expire");

END IF;

我在这里试图实现的是创建一个表、一个约束和一个索引(如果该表不存在)。

即使更改空行,我也会遇到各种语法错误。 IF NOT EXISTS 总是会导致错误,无论我做什么或之后发生什么。好像 PostgreSQL 甚至不知道它。即使我从教程中复制片段,PostgreSQL 也会崩溃。

我使用的是 Heroku Postgres,版本 12.4。

SELECT 部分本身有效。 CREATE TABLEALTER TABLECREATE INDEX 行也在结构之外工作。

错误信息是:

SQL Error [42601]: ERROR: syntax error at or near "IF"
Position: 5

最佳答案

尝试使用 DO 语句

do $$
begin
IF NOT EXISTS (
SELECT FROM information_schema.tables
WHERE table_schema = 'public' AND table_name = 'session'
)

THEN

CREATE TABLE public.session (
sid varchar NOT NULL COLLATE "default",
sess json NOT NULL,
expire timestamp(6) NOT NULL
) WITH (OIDS=FALSE);
ALTER TABLE public.session ADD CONSTRAINT "session_pkey" PRIMARY KEY ("sid") NOT DEFERRABLE INITIALLY IMMEDIATE;
CREATE INDEX "IDX_session_expire" ON public.session ("expire");

END IF;
end;
$$

DEMO

最好使用这种方法:

create table if not exists test(Id int)

关于PostgreSQL "if not exists"总是抛出语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63734087/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com