SQLによる書き込み

insertupdateupsertdelete および 一括更新

概要

Retoolでは、GUIモードで、ほとんどのSQLデータベースへの書き込みをサポートしています。GUIモードには、次の2つの利点があります。実際のSQLの記述に慣れていないユーザーがクエリーを作成できる使いやすいインターフェイスが用意されているという点、テーブルの削除などの破壊的操作を誤って行う可能性がなくなるという点です。GUIモードでは、行の挿入、行の更新、行の削除など、ほとんどの書き込み操作がサポートされています(一括で行うこともできます)。

はじめに

SQLリソースを構成( English )すると、次のように、クエリー・エディター内のドロップダウンからGUIモードを選択できるようになります。

1600

🚧

GUIモードが無効になっているのはなぜですか?

セレクターでGUIモードが無効になっている場合は、データベース・ユーザーに書き込み権限がない可能性があります。リソース設定に戻り、読み取り権限と書き込み権限が両方ともあるデータベース・ユーザーを入力してみてください。

GUIモードを選択すると、次のようなGUIを使用してクエリーを作成できます。

1600

idで検索してordersテーブル内のレコードのステータスを更新します

手動でトリガーすると(例えば、ボタンをクリックすると)、クエリーが実行され、既存のデータベースが変更されます。

📘

SQLまたはGUIモードのみにリソース・アクセスを限定する

SQLリソースをクエリー・エディターのGUIモードの使用のみに限定した方がよい場合があります。これは、ユーザーに実際のSQLの書き込み操作を実行されたくない場合に特に役立ちます。

これを有効にするには、リソース構成ページで「show write GUI mode only」オプションをオンにします。なお、この設定を有効にした場合でも、データベース・ユーザーの資格情報には読み取り権限と書き込み権限が両方とも必要になります。

補足すると、読み取り権限しかないデータベース・ユーザーで、同じデータベースに対してまったく別のリソースを作成することができます。書き込み権限がない場合、クエリー・エディターではSQLモードのみが使用可能になります。これにより、リソース・ユーザーによるDROP TABLEなどの破壊的なSQL文の書き込みを防ぐことができます。

一括更新

SQLのupdateupsert、またはdeleteを評価するときは、まず次のように、「filter by」セクションを確認することで、そのクエリーによって影響を受ける行をフィルタリングして除外する必要があります。

1600

filter byセクション

filter byの結果に複数の行が含まれている場合は、Retoolによって通知され、そのクエリーの実行が拒否されます。ただし、複数行の更新を目的としている場合は、以下の「allow this query to modify multiple rows」チェックボックスをオンにできます。

1600

updateまたはupsertの場合は、この設定により、複数の行を更新できるようになります。行の削除の場合、Retoolでは一度に200行まで削除できます。

主キーによる一括更新

データベースに対する一括更新を実行したい場合は、更新するレコードの配列を渡します。この例を以下に示します。

1600

この例では、まずProductID列がデータベース・テーブル内の一意のキーであることが確認されます。一意のキーである場合は、その配列が繰り返され、メンバーごとに、新しい値が既存のデータベース・レコードとマージされます。この場合は、id = 680の製品が新色Redに更新され、id706の製品が新色Greenに更新されます。

注意

  • 文全体が単一のトランザクションで実行されます。いずれかの更新でエラーが発生した場合は、トランザクションがロールバックされます、データベースへの影響はありません。
  • トランザクションの長時間実行が他のデータベース・クエリーの妨げになることがないように、クエリーは30秒後に自動的にタイムアウトになります。

主キーによる一括アップサート

これは上記の「主キーによる一括更新」と同じように機能しますが、新しい主キーを持つオブジェクトを「array of records to update」フィールドに含めることで、複数の新しいレコードを同時に挿入できます。

1600