sql >> Base de Datos >  >> RDS >> PostgreSQL

¿Cómo creo una función definida por el usuario en AWS Aurora RDS Postgres?

Nos encontramos con el mismo problema y nos pusimos en contacto con AWS, quien confirmó que, de hecho, se trata de un problema con la herramienta Editor de consultas. No tienen una ETA sobre cuándo se solucionará el problema.

Solución 1:utilice psql

La buena noticia es que esto funcionará con psql . Este es un fragmento de su correo electrónico de respuesta:

$ 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

Documentación sobre cómo configurarlo:https://docs.aws .amazon.com/AmazonRDS/latest/UserGuide/USER_ConnectToPostgreSQLInstance.html

Solución 2:utilice la API de datos

Ya usamos la API de datos para comunicarse con nuestro clúster, por lo que, para nosotros, la solución más simple es usar la CLI de AWS y el secreto de la base de datos existente.

Puede poner la definición de su función en un function.sql archivo:

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

Luego ejecútelo en la base de datos con:

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

Espero que esto sea útil, ¡buena suerte!