PostgreSQL不允许
ALTER TABLE t RENAME COLUMN IF EXISTS c1 TO c2
Run Code Online (Sandbox Code Playgroud)
...或类似的东西。但是,能够编写修改DB结构的脚本非常方便,该脚本可以再次运行而无需先检查它是否已经运行。
我该如何编写PostgreSQL函数来做到这一点?
Nik*_*iya 19
请阅读这篇文章以获得详细的解释。
DO $$
BEGIN
IF EXISTS(SELECT *
FROM information_schema.columns
WHERE table_name='your_table' and column_name='your_column')
THEN
ALTER TABLE "public"."your_table" RENAME COLUMN "your_column" TO "your_new_column";
END IF;
END $$;
Run Code Online (Sandbox Code Playgroud)
Ste*_*oni 18
您可以简单地处理匿名代码块中可能引发的错误:
DO
$$
BEGIN
ALTER TABLE t
RENAME COLUMN c1 TO c2;
EXCEPTION
WHEN undefined_column THEN RAISE NOTICE 'column t.c1 does not exist';
END;
$$;
Run Code Online (Sandbox Code Playgroud)
您可以省略 THEN 之后的文本而不执行任何操作:
DO
$$
BEGIN
ALTER TABLE t
RENAME COLUMN c1 TO c2;
EXCEPTION
WHEN undefined_column THEN
END;
$$;
Run Code Online (Sandbox Code Playgroud)
当错误发生时,您可能只会得到一个数字。您可以从此处找到条件名称(WHEN 后面的错误名称)。确保您使用的数据库版本正确。