PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Comment créer une fonction définie par l'utilisateur dans AWS Aurora RDS Postgres

Nous avons rencontré le même problème et avons contacté AWS, qui a confirmé qu'il s'agissait bien d'un problème avec l'outil Query Editor. Ils n'ont pas d'ETA sur la date à laquelle le problème sera résolu.

Solution 1 : utiliser psql

La bonne nouvelle est que cela fonctionnera avec psql . Voici un extrait de leur e-mail de réponse :

$ 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

Documentation sur la configuration :https://docs.aws .amazon.com/AmazonRDS/latest/UserGuide/USER_ConnectToPostgreSQLInstance.html

Solution 2 :Utiliser l'API de données

Nous utilisons déjà l'API de données pour communiquer avec notre cluster, donc pour nous, la solution la plus simple consiste en fait à utiliser l'AWS CLI et le secret de la base de données existante.

Vous pouvez mettre votre définition de fonction dans un function.sql fichier :

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

Puis exécutez-le sur la base de données avec :

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

J'espère que cela vous sera utile, bonne chance !