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

入力配列に基づいてUPSERTする機能の改善

    Postgresの中央テーブルにプッシュするさまざまなサーバーがあり、これにより別の問題が発生します。テーブルに列を追加するとどうなりますか:

    ALTER TABLE item ADD COLUMN category citext;
    

    これで、テーブルには3つではなく4つの列があります。

    私の既存のプッシュはすべてすぐに 入力から欠落している列があるため、中断します。すべてのサーバーを同時に更新できる可能性は0%であるため、これはオプションではありません。

    1つの解決策は、テーブルのバージョンごとにカスタムタイプを作成することです。

    CREATE TYPE item_v1 AS (
        id uuid,
        marked_for_deletion boolean,
        name_ citext);
    
    CREATE TYPE item_v2 AS (
        id uuid,
        marked_for_deletion boolean,
        name_ citext,
        category citext);
    

    そして、各タイプの関数:

    CREATE OR REPLACE FUNCTION data.item_insert_array (data_in item_v1[]) 
    etc.
    
    CREATE OR REPLACE FUNCTION data.item_insert_array (data_in item_v2[]) 
    etc.
    

    anyarrayを受け取り、CASEを使用して実行するコードを分類する単一の巨大なメソッドがあると思います。私はいくつかの理由でそれをしませんが、あなたはできると思います。 (私はそのアプローチが本当に急いで複数の言語で壊疽になるのを見ました。)

    それはすべてかなりの作業のようです。私が見逃しているもっと簡単なテクニックはありますか?構造化テキスト/XML/ JSONを送信し、解凍してそこから作業できると想像しています。しかし、私は 「simpler」の下にファイルします。

    明らかに、私はまだここで設計に取り組んでいます。示した内容をテストするのに十分なコードを作成しましたが、戻ってこれを数十のテーブルに実装する前に、詳細を整理したいと思います。

    助けてくれてありがとう。



    1. 条件付きでカーソルを定義する

    2. current_timeがPostgreSQLでどのように機能するか

    3. Oracleでの<>の意味

    4. SQL Server Management Studio(SSMS)を使用したデータベース設計の概念パート1