无法转换为输入别名

时间:2019-02-12 22:03:21

标签: sql postgresql

我为PostgreSQL类型gp创建了类型别名money,但是我无法从文档中弄清楚应该如何使用它。

我已经建立了一个测试表(和数据库):

CREATE TYPE gp AS (amt money);
CREATE TABLE test (val gp PRIMARY KEY);

但是无论我如何尝试插入行,都会失败

INSERT INTO test VALUES (1); -- column "val" is of type gp but expression is of type integer
INSERT INTO test VALUES ((1)); -- column "val" is of type gp but expression is of type integer
INSERT INTO test VALUES (CAST (1 AS gp)); -- cannot cast type integer to gp
INSERT INTO test VALUES (CAST (CAST (1 AS money) AS gp)); -- cannot cast type money to gp
INSERT INTO test VALUES ((amt=1)); -- column "amt" does not exist
INSERT INTO test VALUES ((amt=1)::gp); -- column "amt" does not exist

据我了解,gp类型应该是别名:gp::money::numeric,那么为什么不能将其从money转换为money的别名? / p>

2 个答案:

答案 0 :(得分:2)

您应该使用行构造器:

insert into test values (row(1));

the documentation:

  

当列表中有多个表达式时,关键字ROW是可选的。

请注意,只有一个组件的复合类型有点意义。您可以改用domain

答案 1 :(得分:0)

检查以下代码段

CREATE TYPE gp AS (amt money);
CREATE TABLE test (val gp PRIMARY KEY);
INSERT INTO test VALUES (row(1::money))
✓

✓

1 rows affected

db <>提琴here