を持つすべての行は、私は店の設定変数に、このPostgreSQLのテーブルを使用しています:更新1つのSQLクエリ
CREATE TABLE SYS_PARAM(
SETTING_KEY TEXT NOT NULL,
VALUE_TYPE TEXT,
VALUE TEXT
)
;
私は1つのSQL文を使用して、すべての構成設定値を更新するにはどうすればよいですか?
を持つすべての行は、私は店の設定変数に、このPostgreSQLのテーブルを使用しています:更新1つのSQLクエリ
CREATE TABLE SYS_PARAM(
SETTING_KEY TEXT NOT NULL,
VALUE_TYPE TEXT,
VALUE TEXT
)
;
私は1つのSQL文を使用して、すべての構成設定値を更新するにはどうすればよいですか?
あなたが時間をかけて一度か二度よりもこれらの更新プログラムの詳細を実行することを計画している場合、機能があなたのためにこれを扱う持って良いでしょう。あなたはそうのように、関数内で可変引数パラメータの型としてテーブル自体を使用することができます。
-- The function
CREATE OR REPLACE FUNCTION update_sys_param(VARIADIC params sys_param[])
RETURNS VOID
AS $$
BEGIN
UPDATE sys_param
SET value_type = upd.value_type, value = upd.value
FROM
sys_param src
INNER JOIN
UNNEST(params) upd
ON (src.setting_key = upd.setting_key);
END; $$ LANGUAGE PLPGSQL;
-- To call it
SELECT update_sys_param(('SMTP_PORT','int','123'),('SMTP_OTHER','text','435343'));
しかし、これは1回の更新である場合は、これら二つのいずれかを試すことができます。
CASE
を使用してUPDATE sys_param
SET
value_type = new.value_type,
value = new.value
FROM
sys_param src
INNER JOIN
new_params new --< this table/view/cte must already exist or you must create it.
ON (src.setting_key = new.setting_key);
UPDATEをJOINを使用してUPDATE 0
相関更新を行うことでこれを達成できると思います。
以下の記事を参照してください:
https://www.ibm.com/support/knowledgecenter/ssw_i5_54/sqlp/rbafyexsub4.htm
いくつか例を挙げてもらえますか? –
@PeterPenzov - リンクshankarsh15には2つの例があります。つまり、ソーステーブルを更新する新しい値を持つ別のテーブルが必要です。ソーステーブルを直接更新するだけではなくても、これと同じくらい多くの作業が必要になります。 – Nicarus
パラメータごとに個別の更新を使用するだけです。 –
はい、努力はSQLクエリの数を減らすことです。もし何百行もあれば?あまりにも多くのクエリを簡単に管理することはできません。 –
特定のパフォーマンス上の問題を解決している場合を除き、EAVデータ・モデルで複数の行を更新しようとするのは時期尚早の最適化です。トランザクション内で更新をラップすることができるので、それらはすべて一度に実行されます。そのような設定を変更することはまれであるはずです。数百のクエリを実行するのに数百ミリ秒かかる場合でも、全体的なパフォーマンスにはほとんど影響しません。 –