【问题标题】:Postgres cast Array to a Custom TypePostgres 将数组转换为自定义类型
【发布时间】:2019-12-02 19:03:57
【问题描述】:

我必须将 varchar 数组转换为自定义类型,但它失败了。

场景

CREATE TYPE foo AS (foo text[]);

SELECT ARRAY['TEST_ONE']::foo; -- fails with ERROR: cannot cast type text[] to foo

我实际上必须将此类型作为可选参数传递给函数,因此我必须将其默认值放在函数参数列表中。像这样

create function foo_func(par1 foo DEFAULT ARRAY['TEST_ONE']::foo) .... 但由于上述问题,这不起作用......

我们将不胜感激..

【问题讨论】:

  • 为什么要用自定义类型来混淆像文本数组这样简单的东西?

标签: postgresql plpgsql postgresql-9.5 postgresql-11


【解决方案1】:

很难猜出为什么有人会想用这样一个奇怪的想法来复杂化他的生活。无论如何,foo 类型是具有单个 text[] 元素的复合类型,因此字面量应如下所示:

SELECT ROW(ARRAY['TEST_ONE'])::foo;

也许domain 会更方便:

create domain foo as text[];
select array['test_one']::foo;

【讨论】:

  • 感谢@Klin,这有帮助.. 它自动转换来自 Oracle 的数千个对象。只是挑选失败的:)
  • 我明白了。你考虑过域名吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-22
  • 2016-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多