sql >> Databáze >  >> RDS >> PostgreSQL

Jak vytvořím uživatelsky definovanou funkci v AWS Aurora RDS Postgres

Narazili jsme na stejný problém a kontaktovali jsme AWS, který potvrdil, že se skutečně jedná o problém s nástrojem Query Editor. Nemají odhadovaný čas příjezdu, kdy bude problém vyřešen.

Řešení 1:Použijte psql

Dobrou zprávou je, že to bude fungovat s psql . Toto je úryvek z jejich e-mailu s odpovědí:

$ 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

Dokumentace, jak jej nastavit:https://docs.aws .amazon.com/AmazonRDS/latest/UserGuide/USER_ConnectToPostgreSQLInstance.html

Řešení 2:Použijte rozhraní Data API

Již používáme Data API komunikovat s naším clusterem, takže pro nás je nejjednodušším řešením ve skutečnosti použití AWS CLI a existující tajný klíč databáze.

Definici funkce můžete vložit do function.sql soubor:

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

Poté jej spusťte v databázi pomocí:

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

Doufám, že to bude užitečné, hodně štěstí!




  1. napište dotaz, který se vztahuje na celou db namísto tabulky

  2. Co je PostgreSQL?

  3. Nedefinovaná vlastnost:Illuminate\Database\Eloquent\Collection::Laravel 5.2

  4. Jak odstranit prázdná místa z dotazu SQL*Plus?