现在我有一个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[]);