sql >> データベース >  >> RDS >> PostgreSQL

アップサートがPostgreSQL9.5+UPSERTのアップデートであったかどうかを確認するにはどうすればよいですか?

    xmax::text::int > 0だと思います 最も簡単なトリックです:

    so=# DROP TABLE IF EXISTS tab;
    NOTICE:  table "tab" does not exist, skipping
    DROP TABLE
    so=# CREATE TABLE tab(id INT PRIMARY KEY, col text);
    CREATE TABLE
    so=# INSERT INTO tab(id, col) VALUES (1,'a'), (2, 'b');
    INSERT 0 2
    so=# INSERT INTO tab(id, col)
    VALUES (3, 'c'), (4, 'd'), (1,'aaaa')
    ON CONFLICT (id) DO UPDATE SET col = EXCLUDED.col
    returning *,case when xmax::text::int > 0 then 'updated' else 'inserted' end,ctid;
     id | col  |   case   | ctid
    ----+------+----------+-------
      3 | c    | inserted | (0,3)
      4 | d    | inserted | (0,4)
      1 | aaaa | updated  | (0,5)
    (3 rows)
    
    INSERT 0 3
    so=# INSERT INTO tab(id, col)
    VALUES (3, 'c'), (4, 'd'), (1,'aaaa')
    ON CONFLICT (id) DO UPDATE SET col = EXCLUDED.col
    returning *,case when xmax::text::int > 0 then 'updated' else 'inserted' end,ctid;
     id | col  |  case   | ctid
    ----+------+---------+-------
      3 | c    | updated | (0,6)
      4 | d    | updated | (0,7)
      1 | aaaa | updated | (0,8)
    (3 rows)
    
    INSERT 0 3
    


    1. Pythonの問題manage.pymigrate->psycopg2という名前のモジュールがありません

    2. AccessはODBCデータソースとどのように通信しますか?パート4

    3. データ型xmltypeの列でora_hashを使用する方法

    4. AndroidのSqliteの行を更新できませんが、エラーはスローされません