现在我有一个varchar数组(可以为空,没有默认值),
并希望将其转换为成对数组(varchar,integer)。
对于整数值,现在只需设置0。
例如,["a", "b"]将是[("a", 0), ("b", 0)]
我已经知道可以通过以下方式创建对类型:

CREATE TYPE keycount AS (key VARCHAR, count INTEGER);

但不知道如何使用SET来更改列。
谢谢你的建议!

最佳答案

首先创建类型

CREATE TYPE keycount AS (key VARCHAR, count INTEGER);

现在你需要创建类型转换。。
CREATE FUNCTION text_to_keycount(a text)
RETURNS keycount AS
$$
  SELECT ($1, 0)::keycount
$$ LANGUAGE sql;

CREATE CAST (text AS keycount) WITH FUNCTION text_to_keycount(text);

SELECT ARRAY['asdf','asdf']::text[]::keycount[];

现在您可以创建表并转换类型USING
CREATE TABLE foo ( a text[] );
INSERT INTO foo (a) VALUES
  ( ARRAY['1','2','3'] );
ALTER TABLE foo
  ALTER COLUMN a
    SET DATA TYPE keycount[]
    USING CAST (a AS keycount[]);

10-07 16:04