无法将记录类型转换为整数

4

我正在尝试使用以下方法将一个表中的数据插入到另一个表中:

INSERT INTO production.spend_fact (date, client_id, show_name, network_name,
media_type, spend, load_id, note)

SELECT date, client_id, show_name, network_name, media_type, spend, load_id,
note
FROM staging.spend_fact
JOIN
 (SELECT MAX(load_id)
  FROM production.load_dim) AS load_id
ON 1=1;

这个查询之前可以正常工作,但是我在两张表中添加了一个新列(note),现在出现了以下错误:

ERROR: column "load_id" is of type integer but expression is of type record

我尝试使用 CAST(load_id AS INT) 和 load_id::int 将 "load_id" 转换为整数类型,但都无法实现。

production.load_dim 中的 load_id 类型为 serial

production.performance_fact 中的 load_id 类型为 integer

2个回答

4

您需要列名称:

INSERT INTO production.spend_fact (date, client_id, show_name,
                                   network_name, media_type, spend, load_id, note)
    SELECT date, client_id, show_name, network_name, media_type, spend,
           l.load_id, note
    FROM staging.spend_fact CROSS JOIN
         (SELECT MAX(load_id) AS load_id
          FROM production.load_dim
         ) l;

1
您之所以会收到此错误是因为load_id是您连接的子查询的表别名。
当您在选择列表中指定表名时,PostgreSQL将选择该表的所有列作为单个行类型值。
您可以使用以下语法直接访问行值字段:(load_id).max
或者您可以在连接中使用不同的命名:
join (select max(load_id) as load_id FROM production.load_dim) as dummy_name on true

或者你可以使用子查询代替连接:
select date, client_id, show_name, network_name, media_type, spend,
(SELECT MAX(load_id) FROM production.load_dim) ,
note
FROM staging.spend_fact;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接