Usar PL/Rust para escrever funções do PostgreSQL na linguagem Rust
O PL/Rust é uma extensão de linguagem Rust confiável para o PostgreSQL. Você pode usá-lo para procedimentos armazenados, funções e outros códigos processuais que podem ser chamados do SQL. A extensão de linguagem PL/Rust está disponível nas seguintes versões:
-
RDS para PostgreSQL 16.1 e versões 16 posteriores
-
RDS para PostgreSQL 15.2-R2 e versões 15 posteriores
-
RDS para PostgreSQL 14.9 e versões 14 posteriores
-
RDS para PostgreSQL 13.12 e versões 13 posteriores
Para obter mais informações, consulte PL/Rust
Configurar o PL/Rust
Para instalar a extensão plrust da instância de banco de dados, adicione o plrust ao parâmetro shared_preload_libraries
no grupo de parâmetros de banco de dados associado à instância de banco de dados. Com a extensão plrust instalada, é possível criar funções.
Para modificar o parâmetro shared_preload_libraries
, a instância de banco de dados deve estar associada a um grupo de parâmetros personalizado. Para obter mais informações sobre como criar um grupo de parâmetros de banco de dados personalizado, consulte Grupos de parâmetros para Amazon RDS.
É possível instalar a extensão plrust usando o AWS Management Console ou a AWS CLI.
As etapas a seguir pressupõem que a instância de banco de dados esteja associada a um grupo de parâmetros de banco de dados personalizado.
Instalar a extensão plrust no parâmetro shared_preload_libraries
Conclua as etapas a seguir usando uma conta que seja membro do grupo (perfil) rds_superuser
.
Faça login no AWS Management Console e abra o console do Amazon RDS em https://console.aws.amazon.com/rds/
. -
No painel de navegação, escolha Bancos de dados.
-
Escolha o nome da instância de banco de dados para mostrar os detalhes.
-
Abra a guia Configuração da instância de banco de dados e encontre o link do grupo de parâmetros da instância de banco de dados.
-
Clique no link para abrir os parâmetros personalizados associados à instância de banco.
-
No campo Parameters (Parâmetros), digite
shared_pre
para encontrar o parâmetroshared_preload_libraries
. -
Selecione Edit parameters (Editar parâmetros) para acessar os valores das propriedades.
-
Adicione plrust à lista no campo Valores. Use uma vírgula para separar itens na lista de valores.
Reinicialize a instância de banco de dados para que a alteração no parâmetro
shared_preload_libraries
tenha efeito. A reinicialização inicial pode exigir mais tempo para ser concluída.Quando a instância estiver disponível, verifique se plrust foi inicializado. Use
psql
para se conectar à instância de banco de dados e execute o comando a seguir.SHOW shared_preload_libraries;
Sua saída deve ser semelhante à seguinte:
shared_preload_libraries -------------------------- rdsutils,plrust (1 row)
Instalar a extensão plrust no parâmetro shared_preload_libraries
Conclua as etapas a seguir usando uma conta que seja membro do grupo (perfil) rds_superuser
.
Utilize o comando modify-db-parameter-group da AWS CLI para adicionar plrust ao parâmetro
shared_preload_libraries
.aws rds modify-db-parameter-group \ --db-parameter-group-name
custom-param-group-name
\ --parameters "ParameterName=shared_preload_libraries,ParameterValue=plrust,ApplyMethod=pending-reboot" \ --regionaws-region
-
Use o comando reboot-db-instance da AWS CLI para reinicializar a instância de banco de dados e inicializar a biblioteca plrust. A reinicialização inicial pode exigir mais tempo para ser concluída.
aws rds reboot-db-instance \ --db-instance-identifier
your-instance
\ --regionaws-region
Quando a instância estiver disponível, é possível verificar se plrust foi inicializado. Use
psql
para se conectar à instância de banco de dados e execute o comando a seguir.SHOW shared_preload_libraries;
Sua saída deve ser semelhante à seguinte:
shared_preload_libraries -------------------------- rdsutils,plrust (1 row)
Criar funções com o PL/Rust
O PL/Rust compilará a função como uma biblioteca dinâmica, a carregará e a executará.
A função do Rust a seguir filtra múltiplos de uma matriz.
postgres=> CREATE LANGUAGE plrust; CREATE EXTENSION
CREATE OR REPLACE FUNCTION filter_multiples(a BIGINT[], multiple BIGINT) RETURNS BIGINT[] IMMUTABLE STRICT LANGUAGE PLRUST AS $$ Ok(Some(a.into_iter().filter(|x| x.unwrap() % multiple != 0).collect())) $$; WITH gen_values AS ( SELECT ARRAY(SELECT * FROM generate_series(1,100)) as arr) SELECT filter_multiples(arr, 3) from gen_values;
Usar caixas com PL/Rust
No RDS para PostgreSQL versões 16.3-R2 e posterior, 15.7-R2 e versões 15 posteriores, 14.12-R2 e versões 14 posteriores e 13.15-R2 e versões 13 posteriores, o PL/Rust é compatível com caixas adicionais:
-
url
-
regex
-
serde
-
serde_json
No RDS para PostgreSQL versões 15.5-R2 e posterior, 14.10-R2 e versões 14 posteriores e 13.13-R2 e versões 13 posteriores, o PL/Rust é compatível com duas caixas adicionais:
-
croaring-rs
-
num-bigint
A partir das versões 15.4, 14.9 e 13.12 do Amazon RDS para PostgreSQL, o PL/Rust comporta as seguintes caixas:
-
aes
-
ctr
-
rand
Somente os recursos padrão são comportados para essas caixas. As novas versões do RDS para PostgreSQL poderão conter versões de caixa atualizadas, ao passo que as mais antigas podem deixar de ter suporte.
Siga as práticas recomendadas para realizar uma atualização de versão principal e testar se suas funções do PL/Rust são compatíveis com a nova versão principal. Para obter mais informações, consulte a publicação de blog Práticas recomendadas para atualizar o Amazon RDS para versões principais e secundárias do PostgreSQL
Exemplos de uso de dependências ao criar uma função PL/Rust estão disponíveis em Usar dependências
Limitações do PL/Rust
Por padrão, os usuários do banco de dados não podem usar PL/Rust. Para fornecer acesso ao PL/Rust, conecte-se como usuário com o privilégio rds_superuser e execute o seguinte comando:
postgres=> GRANT USAGE ON LANGUAGE PLRUST TO
user
;