Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql insert的表达式比目标多_Postgresql_Sql Insert - Fatal编程技术网

Postgresql insert的表达式比目标多

Postgresql insert的表达式比目标多,postgresql,sql-insert,Postgresql,Sql Insert,我知道这已经被询问和回答了,但是我仍然无法正确插入这个触发器函数。我知道插入的值数量相同,但不断获取的表达式比目标表达式多。列结构中唯一的区别是namespace2.t1有一个额外的列,它不包含在namespace1.t1中;这就是为什么我不能从namespace2.t1中选择* CREATE OR REPLACE FUNCTION upsert_trigger_function() RETURNS TRIGGER AS $$ BEGIN INSERT INTO namespac

我知道这已经被询问和回答了,但是我仍然无法正确插入这个触发器函数。我知道插入的值数量相同,但不断获取的
表达式比目标表达式多。列结构中唯一的区别是namespace2.t1有一个额外的列,它不包含在namespace1.t1中;这就是为什么我不能从namespace2.t1中选择*

CREATE 
OR REPLACE FUNCTION upsert_trigger_function() RETURNS TRIGGER AS $$ 
BEGIN
  INSERT INTO
    namespace1.t1 (col1, col2, col3, col4, col5, col6, col7, col8, col9, col10, col11) 
    SELECT
(col1, col2, col3, col4, col5, col6, col7, col8, col9, col10, col11) 
    FROM
      namespace2.t1 
      ON CONFLICT (col1) DO 
      UPDATE
      SET
        col2 = namespace2.t1.col2,
        ... 
      WHERE
        namespace2.t1.col1 = col1;
RETURN NEW;
END;
LANGUAGE 'plpgsql';
还有我的扳机:

CREATE TRIGGER upsert_namespace1_t1 after INSERT 
OR 
UPDATE
  ON namespace2.t2 FOR EACH ROW EXECUTE PROCEDURE upsert_trigger_function();

你能不能试着用小提琴来重现这一点(例如)去掉SELECT语句中列列表周围无用的括号(在本例中是错误的)。@a_horse_带有_no_名称,当我删除它时,它告诉我我对FROM t1的引用无效,这是一个不同的错误(因此是一个问题),但你可能想要
col2=EXCLUDED.col2,…
在更新部分。@一匹没有名字的马,很酷。行。谢谢你给我这个问题的链接。我没能找到那个答案。现在我明白了我得到的回报。谢谢:D