我正在尝试运行这个 sql,如果不存在,它会创建一个新类型:
IF NOT EXISTS (SELECT 1 FROM pg_type WHERE typname = 'ai') CREATE TYPE ai AS (a text, i int);
Run Code Online (Sandbox Code Playgroud)
我在“if”处或附近遇到错误,我试图找出答案,但没有帮助。我也试过这个,但它仍然不起作用:
CASE (SELECT 1 FROM pg_type WHERE typname = 'ai') WHEN IS NULL THEN CREATE TYPE ai AS (a text, i int);
Run Code Online (Sandbox Code Playgroud)
“CASE”附近或“CASE”处的错误
你的IF语法是错误的,它错过了END IF。根据上下文,即当您不在 PL/pgSQL 块中(如函数等)时,您还需要使用匿名DO块。并且不要忘记检查架构,否则如果该类型已经存在于另一个架构中,您可能会得到误报。
DO
$$
BEGIN
IF NOT EXISTS (SELECT *
FROM pg_type typ
INNER JOIN pg_namespace nsp
ON nsp.oid = typ.typnamespace
WHERE nsp.nspname = current_schema()
AND typ.typname = 'ai') THEN
CREATE TYPE ai
AS (a text,
i integer);
END IF;
END;
$$
LANGUAGE plpgsql;
Run Code Online (Sandbox Code Playgroud)
(或者,如果你已经在PL / pgSQL的块,只是之间的一切IF和END IF;包括IF和END IF;。)
| 归档时间: |
|
| 查看次数: |
3902 次 |
| 最近记录: |