如果 Postgresql 不存在,则创建一个类型

Ngu*_*HCM 0 postgresql

我正在尝试运行这个 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”处的错误

sti*_*bit 7

你的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的块,只是之间的一切IFEND IF;包括IFEND IF;。)