Usar PL/Rust para escrever funções do PostgreSQL na linguagem Rust - Amazon Relational Database Service

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 no GitHub.

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.

  1. Faça login no AWS Management Console e abra o console do Amazon RDS em https://console.aws.amazon.com/rds/.

  2. No painel de navegação, escolha Bancos de dados.

  3. Escolha o nome da instância de banco de dados para mostrar os detalhes.

  4. 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.

  5. Clique no link para abrir os parâmetros personalizados associados à instância de banco.

  6. No campo Parameters (Parâmetros), digite shared_pre para encontrar o parâmetro shared_preload_libraries.

  7. Selecione Edit parameters (Editar parâmetros) para acessar os valores das propriedades.

  8. Adicione plrust à lista no campo Valores. Use uma vírgula para separar itens na lista de valores.

  9. 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.

  10. 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.

  1. 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" \ --region aws-region
  2. 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 \ --region aws-region
  3. 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 e Atualizar o mecanismo de banco de dados PostgreSQL para Amazon RDS no “Guia do usuário do Amazon RDS”.

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;