0
postgresqlでsequelize jsのupsertメソッドを使用しようとしています。私はsequelize-自動JSプライマリキーがnullの場合、js upsertの制御を続行します。
私のテーブルによってモデルを作成していますことのようである:
CREATE SEQUENCE TBL_CITY_LANG_SEQ;
CREATE TABLE TBL_CITY_LANG(
ID BIGINT DEFAULT NEXTVAL ('TBL_CITY_LANG_SEQ') NOT NULL,
CITY_NAME VARCHAR(150) NOT NULL,
CITY_ID BIGINT NOT NULL,
LANGUAGE_ID BIGINT NOT NULL,
DB_EDIT_DATE TIMESTAMP(3) NOT NULL,
DB_USER_ID BIGINT NOT NULL,
DB_STATUS_ID INT NOT NULL,
CONSTRAINT PK_TBL_CITY_LANG_SEQ PRIMARY KEY
(
ID
),
CONSTRAINT IX_TBL_CITY_LANG_SEQ UNIQUE
(
LANGUAGE_ID,
CITY_ID
));
そしてsequelize用法アップサート:LOGを実行
cityTable.upsert(myjson).then(function (result) {
resolve(result);
});
SQLは次のとおりです。
CREATE OR REPLACE FUNCTION pg_temp.sequelize_upsert() RETURNS integer AS $func$
BEGIN INSERT INTO "tbl_city_lang" ("id","city_name","city_id","language_id","db_edit_date","db_user_id","db_status_id") VALUES (1,'istanbul 1','19','1','2015-03-03','2','1');
RETURN 1;
EXCEPTION WHEN unique_violation
THEN UPDATE "tbl_city_lang" SET "id"=1,"city_name"='istanbul 1',"city_id"='19',"language_id"='1',"db_edit_date"='2015-03-03',"db_user_id"='2',"db_status_id"='1' WHERE (("id" IS NULL AND "city_id" = '19')); RETURN 2;
END;
$func$ LANGUAGE plpgsql;
SELECT * FROM pg_temp.sequelize_upsert();
それエラーは発生しませんが、更新されません。私は問題がスクリプトのどこの条件から派生しているのかを考えています。しかし、テーブルにはプライマリキーが必要ですが、ユニークなconstaintで更新可能です。表に主キーが、ユニーク制約によって更新可能なを持っている必要があります()( "ID" がNULLで、 "CITY_ID" = '19')
しかし
。