Todos os produtos
Search
Central de documentação

ApsaraDB RDS:Use the oss_fdw extension to read and write foreign data text files

Última atualização: Jun 26, 2026

A extensão oss_fdw é um wrapper de dados externos (FDW) para o ApsaraDB RDS for PostgreSQL que mapeia buckets do Object Storage Service (OSS) a tabelas externas do PostgreSQL. Use-a para consultar arquivos CSV no OSS sem importação prévia, carregar grandes conjuntos de dados na instância RDS ou exportar dados de tabelas para o OSS para arquivamento e processamento posterior.

Pré-requisitos

Antes de começar, verifique se você tem:

Como funciona

O oss_fdw mapeia um ou mais objetos do OSS a uma tabela externa do PostgreSQL. Consultas nessa tabela externa acionam uma varredura nos objetos correspondentes no OSS. Nenhum dado é copiado para a instância RDS até que você o insira explicitamente. Todos os objetos do OSS devem estar no formato CSV, com compressão gzip opcional.

Para usar o oss_fdw:

  1. Instale a extensão.

  2. Crie um servidor para armazenar as credenciais de conexão do OSS.

  3. Crie uma tabela externa mapeada para os objetos do OSS que deseja ler ou gravar.

  4. Consulte ou grave dados pela tabela externa.

Configurar o oss_fdw

Etapa 1: Instale a extensão

CREATE EXTENSION oss_fdw;

Etapa 2: Crie um servidor

O servidor armazena o endpoint do OSS, as credenciais e o nome do bucket. Todas as conexões da tabela externa passam por esse servidor.

CREATE SERVER ossserver FOREIGN DATA WRAPPER oss_fdw OPTIONS (
    host   'oss-cn-hangzhou-internal.aliyuncs.com',
    id     '<your-access-key-id>',
    key    '<your-access-key-secret>',
    bucket '<your-bucket-name>'
);

Espaço reservado

Descrição

<your-access-key-id>

Seu AccessKey ID

<your-access-key-secret>

Seu AccessKey Secret

<your-bucket-name>

Nome do bucket do OSS

Use o endpoint interno da região para evitar tráfego pela rede pública. Para encontrar o endpoint, faça login no console do OSS, abra o bucket e verifique o valor de Endpoint na página Overview.

Para todos os parâmetros de CREATE SERVER, incluindo ajustes de tolerância a falhas, consulte Parâmetros do servidor.

Etapa 3: Crie uma tabela externa

Defina uma tabela externa cujo esquema de colunas corresponda à estrutura dos arquivos CSV no OSS.

CREATE FOREIGN TABLE ossexample (
    date   text,
    time   text,
    open   float,
    high   float,
    low    float,
    volume int
)
SERVER ossserver
OPTIONS (
    dir       'osstest/',
    delimiter ',',
    format    'csv',
    encoding  'utf8'
);
Importante

O esquema de colunas deve corresponder exatamente à estrutura dos objetos do OSS. Incompatibilidades causam erros de importação.

A opção dir aponta para uma pasta do OSS. Todo o conteúdo dessa pasta (exceto subpastas) é incluído. Para direcionar arquivos específicos, use filepath. Observe que filepath suporta apenas importação, enquanto dir suporta importação e exportação.

Para todos os parâmetros de CREATE FOREIGN TABLE, consulte Parâmetros da tabela externa.

Importar dados do OSS

Leia diretamente do OSS sem carregar dados na instância RDS:

SELECT * FROM ossexample;

Carregue dados em uma tabela local para acelerar consultas subsequentes:

  1. Crie uma tabela local com o mesmo esquema:

     CREATE TABLE example (
         date   text,
         time   text,
         open   float,
         high   float,
         low    float,
         volume int
     );
  2. Insira os dados da tabela externa:

     INSERT INTO example SELECT * FROM ossexample;

Antes de importar, execute EXPLAIN para estimar a quantidade de objetos do OSS correspondentes e obter o plano de consulta:

EXPLAIN INSERT INTO example SELECT * FROM ossexample;

Saída esperada:

                                      QUERY PLAN
----------------------------------------------------------------------
 Insert on example  (cost=0.00..1.10 rows=0 width=0)
   ->  Foreign Scan on ossexample  (cost=0.00..1.10 rows=1 width=998)
         Foreign OssDir: osstest/
         Number Of Ossfile: 2

Exportar dados para o OSS

Grave dados de uma tabela local no OSS:

INSERT INTO ossexample SELECT * FROM example;

Na exportação, a tabela externa deve usar a opção dir (não filepath). Cada operação de exportação grava objetos na pasta especificada do OSS.

Para controlar o tamanho do arquivo de saída e o paralelismo, use os parâmetros específicos de gravação em Parâmetros da tabela externa.

Parâmetros do servidor

Use estes parâmetros na cláusula OPTIONS do comando CREATE SERVER.

Parâmetros de conexão

Parâmetro

Descrição

host

Endpoint interno do OSS para sua região. Encontre-o na página Overview do bucket no console do OSS.

id

Seu AccessKey ID.

key

Seu AccessKey Secret.

bucket

Nome do bucket do OSS.

Parâmetros de tolerância a falhas

Em caso de problemas de conectividade de rede, ajuste estes parâmetros para evitar erros de timeout prematuros.

Parâmetro

Padrão

Unidade

Descrição

oss_connect_timeout

10

segundos

Timeout de conexão.

oss_dns_cache_timeout

60

segundos

Timeout do cache de registros DNS.

oss_speed_limit

1024

bit/s

Taxa mínima aceitável de transmissão (equivalente a 1 Kbit/s).

oss_speed_time

15

segundos

Tempo máximo em que a taxa de transmissão pode permanecer abaixo de oss_speed_limit antes de acionar um erro de timeout.

Com as configurações padrão, ocorre um erro de timeout se a taxa de transferência permanecer abaixo de 1 Kbit/s por 15 segundos consecutivos.

Parâmetros da tabela externa

Use estes parâmetros na cláusula OPTIONS do comando CREATE FOREIGN TABLE.

Parâmetros de seleção de arquivos

Especifique exatamente um entre filepath, dir ou prefix.

Parâmetro

Suporte

Descrição

filepath

Apenas importação

Nome do objeto ou padrão de prefixo para correspondência. Não inclui o nome do bucket. Corresponde a objetos chamados filepath e filepath.1, filepath.2, ... (inteiros consecutivos começando em 1). Uma lacuna na sequência interrompe a correspondência. Por exemplo, se filepath.5 existir, mas filepath.4 não, filepath.5 não será importado.

dir

Importação e exportação

Pasta do OSS para leitura ou gravação. Deve terminar com /. Corresponde a todos os objetos diretamente na pasta; subpastas e seu conteúdo são excluídos.

prefix

Prefixo de caminho para corresponder a objetos. Não suporta expressões regulares.

Parâmetros de formato

Parâmetro

Descrição

format

Formato do arquivo. Apenas csv é suportado.

encoding

Codificação de caracteres. Suporta codificações comuns do PostgreSQL, incluindo utf8.

delimiter

Caractere delimitador de colunas.

quote

Caractere de aspas para valores de campo.

escape

Caractere de escape.

null

String a ser interpretada como NULL. Por exemplo, null 'test' trata o valor test como NULL.

force_not_null

Nome da coluna cujos valores vazios são lidos como strings vazias em vez de NULL. Por exemplo, force_not_null 'id' armazena valores vazios de id como '' em vez de NULL.

Parâmetros de compressão

Parâmetro

Padrão

Descrição

compressiontype

none

Formato de compressão. Use none para objetos sem compressão ou gzip para objetos comprimidos com gzip.

compressionlevel

6

Nível de compressão apenas para operações de gravação. Valores válidos: 1–9.

Parâmetros de tolerância a falhas

Parâmetro

Descrição

parse_errors

Número de erros de análise no nível de linha tolerados durante a importação. Linhas com falha na análise são ignoradas silenciosamente. Não suportado para exportação — não defina este parâmetro ao gravar no OSS.

Parâmetros específicos de gravação

Estes parâmetros aplicam-se apenas à gravação de dados no OSS.

Parâmetro

Padrão

Intervalo

Unidade

Descrição

oss_flush_block_size

32

1–128

MB

Tamanho do buffer para cada gravação no OSS.

oss_file_max_size

1024

8–4000

MB

Tamanho máximo de um único objeto de saída no OSS. Ao atingir esse limite, os dados continuam em um novo objeto.

num_parallel_worker

3

1–8

threads

Número de threads paralelas usadas para comprimir dados durante a gravação.

Ferramentas auxiliares

Listar objetos correspondentes

A função oss_fdw_list_file retorna o nome e o tamanho de cada objeto do OSS correspondente a uma determinada tabela externa.

Assinatura:

oss_fdw_list_file(relname text, schema text DEFAULT 'public')

Parâmetros:

Parâmetro

Tipo

Descrição

relname

text

Nome da tabela externa.

schema

text

Esquema que contém a tabela externa. O padrão é public.

Colunas de retorno:

Coluna

Tipo

Descrição

name

text

Caminho completo do objeto OSS, relativo à raiz do bucket.

size

bigint

Tamanho do objeto em bytes.

Exemplo:

SELECT * FROM oss_fdw_list_file('ossexample');

Saída:

              name              |   size
--------------------------------+-----------
 osstest/test.gz.1              | 739698350
 osstest/test.gz.2              | 739413041
 osstest/test.gz.3              | 739562048
(3 rows)

Ler um único objeto

O parâmetro oss_fdw.rds_read_one_file limita a varredura da tabela externa a um objeto específico. Aplica-se apenas à importação.

SET oss_fdw.rds_read_one_file = 'osstest/test.gz.2';
SELECT * FROM oss_fdw_list_file('ossexample');

Saída:

              name              |   size
--------------------------------+-----------
 oss_test/test.gz.2             | 739413041
(1 rows)

Redefina este parâmetro para retomar a varredura normal de múltiplos objetos.

Proteger suas credenciais

Se os valores de id e key em CREATE SERVER forem armazenados em texto simples, qualquer usuário de banco de dados com acesso a pg_foreign_server poderá ler seu par de AccessKey:

SELECT * FROM pg_foreign_server;

Para proteger suas credenciais, use criptografia simétrica nos valores de id e key ao criar o servidor. Use uma chave de criptografia diferente para cada instância RDS. Quando criptografados, os valores aparecem como MD5**** em pg_foreign_server:

 ossserver | 10 | 16390 | | | | {host=oss-cn-hangzhou-zmf.aliyuncs.com,id=MD5****,key=MD5****,bucket=067862}

Cada valor criptografado começa com MD5, e o comprimento total dividido por 8 resulta em 3. Após a exportação, os valores criptografados não são recriptografados. Não é possível criar AccessKey IDs e secrets que comecem com MD5 — o prefixo de criptografia é reservado.

Diferentemente do Greenplum, o oss_fdw não suporta a adição de tipos de dados durante a criptografia, o que preserva a compatibilidade com versões anteriores do PostgreSQL.

Observações de uso

  • Mantenha a instância RDS e o bucket do OSS na mesma região para maximizar o throughput de importação e exportação. Consulte Nomes de domínio do OSS para detalhes sobre endpoints.

  • O oss_fdw lê e grava apenas no formato CSV, incluindo CSV comprimido com gzip.

  • O desempenho da importação depende da CPU, I/O e memória disponíveis na instância RDS.

  • O parâmetro parse_errors é suportado apenas para leituras. Sua definição em uma tabela externa de exportação não é permitida.

  • O parâmetro filepath destina-se apenas à importação. Para exportação, use dir.

  • As opções filepath e dir são mutuamente exclusivas. Especifique exatamente uma.

Solução de problemas

Erro: oss endpoint not in allow list

Se você visualizar o erro ERROR: oss endpoint userendpoint not in aliyun white list ao consultar uma tabela externa, alterne para o endpoint público do OSS da sua região. Consulte Regiões e endpoints.

Falhas de importação ou exportação

Quando uma operação falha, o OSS retorna detalhes do erro no log do PostgreSQL:

Campo

Descrição

code

Código de status HTTP da solicitação com falha.

error_code

Código de erro retornado pelo OSS.

error_msg

Mensagem de erro retornada pelo OSS.

req_id

UUID da solicitação com falha. Inclua este valor ao enviar um ticket de suporte.

Para obter uma lista completa de códigos de erro do OSS, consulte:

Erros de timeout também podem ser resolvidos ajustando os parâmetros de tolerância a falhas em Parâmetros do servidor.