PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Come posso creare una funzione definita dall'utente in AWS Aurora RDS Postgres

Abbiamo riscontrato lo stesso problema e ci siamo messi in contatto con AWS, che ha confermato che si tratta effettivamente di un problema con lo strumento Editor di query. Non hanno un ETA su quando il problema verrà risolto.

Soluzione 1:usa psql

La buona notizia è che funzionerà con psql . Questo è uno snippet della loro email di risposta:

$ 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

Documentazione su come configurarlo:https://docs.aws .amazon.com/AmazonRDS/latest/UserGuide/USER_ConnectToPostgreSQLInstance.html

Soluzione 2:utilizza l'API dei dati

Utilizziamo già l'Data API per comunicare con il nostro cluster, quindi per noi la soluzione più semplice è in realtà utilizzare l'AWS CLI e il database secret esistente.

Puoi inserire la definizione della tua funzione in un function.sql file:

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

Quindi eseguilo sul database 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

Spero che questo sia utile, buona fortuna!