我正在尝试从我从Update规则调用的函数中的记录变量中选择一列,并收到以下错误:
'无法识别记录数据类型“
中的列”名称“以下是我正在做的产生错误的内容:
在更新规则中:
SELECT * INTO TEMPORARY TABLE TempTable FROM NEW;
SELECT MyFunction();
从MyFunction()
中DECLARE RecordVar Record;
SELECT * INTO STRICT RecordVar FROM TempTable;
EXECUTE 'UPDATE AnotherTable SET column = $1.name' USING RecordVar;
注意:我意识到有更简单的方法来实现上述代码的实现,但我已经简化了实际的实现,专注于我遇到的问题,这已经开辟了其他可能的解决方案,但我真的喜欢尽可能使上面的代码工作。
答案 0 :(得分:4)
我只是想通了。我不是将NEW中的列插入临时表,而是将新记录作为单个列插入临时表,并将其称为RecordVar。我的函数内部为“NEW”。我的规则和功能现在看起来像这样:
在更新规则中:
SELECT NEW AS "NEW" INTO TEMPORARY TABLE TempTable;
SELECT MyFuction();
从MyFunction()
中DECLARE RecordVar Record;
SELECT * INTO STRICT RecordVar FROM TempTable;
EXECUTE 'UPDATE AnotherTable SET column = $1.name' USING RecordVar."NEW";
答案 1 :(得分:2)
第二部分可以像这样工作:
DO
$BODY$
DECLARE
RecordVar TempTable;
BEGIN
SELECT * INTO STRICT RecordVar FROM TempTable LIMIT 1;
EXECUTE 'UPDATE AnotherTable SET column = $1.name'
USING RecordVar;
END;
$BODY$
请注意我如何使用表名作为类型。 PostgreSQL自动为系统中的每个表创建一个复合类型。
变量包含一行,SELECT
可以返回多行。除了第一个之外的所有都将被丢弃。我添加LIMIT 1
来澄清效果。我怀疑这是你想要的。
您可能不必在规则中使用临时表开头。您可能希望发布完整的设置...