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

AWS AuroraRDSPostgresでユーザー定義関数を作成するにはどうすればよいですか

    同じ問題が発生し、AWSに連絡しました。AWSは、それがクエリエディターツールの問題であることを確認しました。問題がいつ修正されるかについてのETAはありません。

    解決策1:psqlを使用する

    良いニュースは、これがpsqlで機能することです。 。これは返信メールの抜粋です:

    $ psql -h database-2.cluster-xx.us-west-2.rds.amazonaws.com -d postgres -U postgres
    postgres=> CREATE OR REPLACE FUNCTION trigger_set_updated_at() RETURNS TRIGGER AS $$
    postgres$> BEGIN  NEW.updated_at = NOW();  
    postgres$> RETURN NEW;END;$$ 
    postgres-> LANGUAGE plpgsql;
    CREATE FUNCTION
    

    設定方法に関するドキュメント: https://docs.aws .amazon.com / AmazonRDS / latest / UserGuide / USER_ConnectToPostgreSQLInstance.html

    解決策2:データAPIを使用する

    すでにデータAPI を使用しています クラスタと通信するため、最も簡単なソリューションは、実際にはAWSCLIと既存のデータベースシークレットを使用することです。

    関数定義をfunction.sqlに入れることができます ファイル:

    CREATE OR REPLACE FUNCTION increment(i integer) RETURNS integer AS $$
        BEGIN
            RETURN i + 1;
        END;
    $$ LANGUAGE plpgsql;
    

    次に、次のコマンドを使用してデータベースで実行します。

    cat function.sql | xargs -0 aws rds-data execute-statement \
        --resource-arn arn:aws:rds:eu-west-1:xxx:cluster:cluster-name \
        --secret-arn arn:aws:secretsmanager:eu-west-1:xxx:secret:secret-name-xxx \
        --database "database_name" \
        --sql
    

    うまくいけば、これがお役に立てば幸いです!




    1. SQLクエリ-フラグに基づいてすべてのレコードを取得します

    2. トランスログの入力を回避するためのOracleSQL手法

    3. JSON列の配列の要素をクエリします

    4. 動的クエリでWHERE1をエミュレートするにはどうすればよいですか?