Thread

  1. Can't get upsert working.

    Bert <biertie@gmail.com> — 2012-11-30T17:00:32Z

    Hello,
    
    Anyone here with upsert experience?
    
    I'm trying to run this query:
    
    WITH UPSERT AS
      (UPDATE oltp.ST_TRANSACTION
       SET (row1,
        row2,
        row3) = (ET.row1,
             ET.row2,
             ET.row3)
       FROM
         (SELECT *
          FROM loadoltp.ST_TRANSACTION_INSERT
          WHERE LOADTABLETIME = '2012-11-30 14:48:59.252960') AS ET returning *)
    INSERT INTO oltp.ST_TRANSACTION
    SELECT (ET.row1,
        ET.row2,
        ET.row3)
    FROM
       (SELECT *
       FROM loadoltp.ST_TRANSACTION_INSERT
       WHERE LOADTABLETIME = '2012-11-30 14:48:59.252960') AS ET
    WHERE ET.tick_server_id NOT IN
        (SELECT ET.tick_server_id
         FROM upsert b)
      AND tra_id NOT IN
        (SELECT ET.tra_id
         FROM upsert b)
    
    But I always get this error message:
    ERROR:  column "row1" is of type integer but expression is of type record
    LINE 67: SELECT (ET.ROW1,
    
    Does anyone has an idea?
    
    wkr,
    Bert
    
    -- 
    Bert Desmet
    0477/305361
    
  2. Re: Can't get upsert working.

    Jasen Betts <jasen@xnet.co.nz> — 2012-12-02T09:56:19Z

    On 2012-12-02, Jasen Betts <jasen@xnet.co.nz> wrote:
    > On 2012-11-30, Bert <biertie@gmail.com> wrote:
    >
    >> Anyone here with upsert experience?
    
    This guy "Depesz" does:
    
    http://www.depesz.com/2012/06/10/why-is-upsert-so-complicated/
    
    -- 
    ⚂⚃ 100% natural
    
    
    
    
  3. Re: Can't get upsert working.

    Richard Huxton <dev@archonet.com> — 2012-12-04T08:36:53Z

    On 30/11/12 17:00, Bert wrote:
    > SELECT (ET.row1,
    >     ET.row2,
    >     ET.row3)
    
    > But I always get this error message:
    > ERROR:  column "row1" is of type integer but expression is of type record
    > LINE 67: SELECT (ET.ROW1,
    >
    > Does anyone has an idea?
    
    You've bracketed the SELECT colums above, which means it's trying to 
    treat them as a single record-column with three fields. Hence the error 
    message.
    
    --
       Richard Huxton
       Archonet Ltd