gpt4 book ai didi

postgresql - 如何将表列的数据类型更改为枚举?

转载 作者:行者123 更新时间:2023-11-29 11:46:57 25 4
gpt4 key购买 nike

我在 Postgres 数据库中有一个表 "ENGINE",我必须在其中将名为 loglevel 的列的数据类型从字符串更改为枚举。

但是,我无法理解手册中的说明:

ALTER [ COLUMN ] column TYPE type [ USING expression ]

最佳答案

enum本身不是数据类型。它是数据类型的。 (通常,您可以将任何 enum 替换为 1:n 表的 FK 列。)并且“string”在 Postgres 中根本不是数据类型。我假设我们正在谈论 textvarchar?如果是这样,这些是您的任务的步骤:

第一步

创建新的 enum 类型,如果它不存在的话。

我们称它为loglevel。它必须包含来自您的字符串列的所有不同值,否则类型转换将失败。这个 DO 命令会处理它:

DO
$$
BEGIN
EXECUTE (
SELECT 'CREATE TYPE loglevel AS ENUM ('
|| string_agg(quote_literal(loglevel), ', ')
|| ')'
FROM (
SELECT loglevel
FROM "ENGINE"
WHERE loglevel IS NOT NULL -- exclude NULL if present
GROUP BY 1
ORDER BY 1
) sub
);
END
$$;

我们必须排除 NULL(如果存在),它不能列为枚举值。 (任何 enum 类型都可以是 NULL。)

相关:

第二步

改变列的数据类型:

您必须明确指定 USING loglevel::loglevel,因为在任何字符串类型(textvarchar、 ...) 和新的 enum 数据类型:

ALTER TABLE "ENGINE" ALTER loglevel TYPE loglevel USING loglevel::loglevel;

详细信息:

关于postgresql - 如何将表列的数据类型更改为枚举?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44936907/

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