Todos los productos
Search
Centro de documentos

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

Última actualización: Sep 03, 2026

La extensión oss_fdw es un contenedor de datos externos (FDW) para ApsaraDB RDS for PostgreSQL que asigna buckets de Object Storage Service (OSS) a tablas externas de PostgreSQL. Úsela para consultar archivos CSV en OSS sin importarlos previamente, cargar grandes conjuntos de datos en su instancia de RDS o exportar datos de tablas a OSS para archivarlos y procesarlos posteriormente.

Requisitos previos

Antes de empezar, asegúrese de contar con lo siguiente:

  • Una instancia de RDS que ejecute PostgreSQL 10 o posterior

  • Si su instancia ejecuta PostgreSQL 14: una versión menor del motor 20220830 o posterior. Para actualizar, consulte Update the minor engine version

  • Un bucket de OSS en la misma región que su instancia de RDS (recomendado por rendimiento). Consulte Activate OSS y Create a bucket

  • Un AccessKey ID y un AccessKey Secret con acceso de lectura y escritura al bucket. Consulte Obtain an AccessKey pair

Funcionamiento

oss_fdw asigna uno o más objetos de OSS a una tabla externa de PostgreSQL. Las consultas sobre la tabla externa desencadenan un escaneo de los objetos coincidentes en OSS; no se copian datos a su instancia de RDS hasta que los inserta explícitamente. Todos los objetos de OSS deben estar en formato CSV, con compresión gzip opcional.

Para usar oss_fdw:

  1. Instale la extensión.

  2. Cree un servidor que almacene las credenciales de conexión a OSS.

  3. Cree una tabla externa que se asigne a los objetos de OSS que desea leer o escribir.

  4. Consulte o escriba datos a través de la tabla externa.

Configuración de oss_fdw

Paso 1: Instalar la extensión

CREATE EXTENSION oss_fdw;

Paso 2: Crear un servidor

El servidor almacena el endpoint de OSS, las credenciales y el nombre del bucket. Todas las conexiones desde la tabla externa pasan por este 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>'
);

Marcador

Descripción

<your-access-key-id>

Su AccessKey ID

<your-access-key-secret>

Su AccessKey Secret

<your-bucket-name>

El nombre de su bucket de OSS

Utilice el endpoint interno de su región para evitar tráfico por la red pública. Para encontrar el endpoint: inicie sesión en la OSS console, abra el bucket y revise el valor de Endpoint en la página de Overview.

Para consultar todos los parámetros de CREATE SERVER, incluido el ajuste de tolerancia a fallos, consulte Parámetros del servidor.

Paso 3: Crear una tabla externa

Defina una tabla externa cuyo esquema de columnas coincida con la estructura de los archivos CSV en 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

El esquema de columnas debe coincidir exactamente con la estructura de los objetos de OSS. Una discrepancia provoca errores de importación.

La opción dir apunta a una carpeta de OSS. Se incluye todo el contenido de esa carpeta (excluyendo subcarpetas). Para dirigirse a archivos específicos, utilice filepath, pero tenga en cuenta que filepath solo admite importación, mientras que dir admite tanto importación como exportación.

Para consultar todos los parámetros de CREATE FOREIGN TABLE, consulte Parámetros de la tabla externa.

Importar datos desde OSS

Lea directamente desde OSS sin cargar datos en su instancia de RDS:

SELECT * FROM ossexample;

Cargue datos en una tabla local para acelerar las consultas posteriores:

  1. Cree una tabla local con el mismo esquema:

     CREATE TABLE example (
         date   text,
         time   text,
         open   float,
         high   float,
         low    float,
         volume int
     );
  2. Inserte datos desde la tabla externa:

     INSERT INTO example SELECT * FROM ossexample;

Antes de importar, ejecute EXPLAIN para estimar la cantidad de objetos de OSS coincidentes y obtener el plan de consulta:

EXPLAIN INSERT INTO example SELECT * FROM ossexample;

Salida 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 datos a OSS

Escriba datos de una tabla local hacia OSS:

INSERT INTO ossexample SELECT * FROM example;

Para la exportación, la tabla externa debe usar la opción dir (no filepath). Cada exportación escribe objetos en la carpeta de OSS especificada.

Para controlar el tamaño del archivo de salida y el paralelismo, utilice los parámetros específicos de escritura en Parámetros de la tabla externa.

Parámetros del servidor

Utilice estos parámetros en la cláusula OPTIONS de CREATE SERVER.

Parámetros de conexión

Parámetro

Descripción

host

El endpoint interno de OSS para su región. Encuéntrelo en la página de Overview del bucket en la consola de OSS.

id

Su AccessKey ID.

key

Su AccessKey Secret.

bucket

El nombre de su bucket de OSS.

Parámetros de tolerancia a fallos

Si experimenta problemas de conectividad de red, ajuste estos parámetros para evitar errores de tiempo de espera prematuros.

Parámetro

Predeterminado

Unidad

Descripción

oss_connect_timeout

10

segundos

Tiempo de espera de conexión.

oss_dns_cache_timeout

60

segundos

Tiempo de espera de la caché de registros DNS.

oss_speed_limit

1024

bit/s

Tasa de transmisión mínima aceptable (equivalente a 1 Kbit/s).

oss_speed_time

15

segundos

Tiempo máximo que la tasa de transmisión puede permanecer por debajo de oss_speed_limit antes de que se active un error de tiempo de espera.

Con los valores predeterminados, ocurre un error de tiempo de espera si la tasa de transferencia se mantiene por debajo de 1 Kbit/s durante 15 segundos consecutivos.

Parámetros de la tabla externa

Utilice estos parámetros en la cláusula OPTIONS de CREATE FOREIGN TABLE.

Parámetros de selección de archivos

Especifique exactamente uno de los siguientes: filepath, dir o prefix.

Parámetro

Compatible con

Descripción

filepath

Solo importación

El nombre del objeto o patrón de prefijo a coincidir. No incluye el nombre del bucket. Coincide con objetos llamados filepath y filepath.1, filepath.2, ... (enteros consecutivos comenzando desde 1). Un salto en la secuencia detiene la coincidencia; por ejemplo, si filepath.5 existe pero filepath.4 no, filepath.5 no se importa.

dir

Importación y exportación

La carpeta de OSS desde la cual leer o hacia la cual escribir. Debe terminar con /. Coincide con todos los objetos directamente en la carpeta; las subcarpetas y su contenido quedan excluidos.

prefix

—

Un prefijo de ruta para coincidir con objetos. No admite expresiones regulares.

Parámetros de formato

Parámetro

Descripción

format

Formato de archivo. Solo se admite csv.

encoding

Codificación de caracteres. Admite codificaciones comunes de PostgreSQL, incluida utf8.

delimiter

Carácter delimitador de columnas.

quote

Carácter de comillas para valores de campo.

escape

Carácter de escape.

null

Cadena a interpretar como NULL. Por ejemplo, null 'test' trata el valor test como NULL.

force_not_null

Nombre de columna cuyos valores vacíos se leen como cadenas vacías en lugar de NULL. Por ejemplo, force_not_null 'id' almacena los valores vacíos de id como '' en lugar de NULL.

Parámetros de compresión

Parámetro

Predeterminado

Descripción

compressiontype

none

Formato de compresión. Utilice none para objetos sin comprimir o gzip para objetos comprimidos con gzip.

compressionlevel

6

Nivel de compresión solo para operaciones de escritura. Valores válidos: 1–9.

Parámetros de tolerancia a fallos

Parámetro

Descripción

parse_errors

Cantidad de errores de análisis sintáctico a nivel de fila que se tolerarán durante la importación. Las filas que no se puedan analizar se omiten silenciosamente. No es compatible con exportación; no configure este parámetro al escribir en OSS.

Parámetros específicos de escritura

Estos parámetros aplican únicamente al escribir datos en OSS.

Parámetro

Predeterminado

Rango

Unidad

Descripción

oss_flush_block_size

32

1–128

MB

Tamaño del búfer para cada escritura en OSS.

oss_file_max_size

1024

8–4000

MB

Tamaño máximo de un solo objeto de salida en OSS. Al alcanzar este límite, los datos continúan en un nuevo objeto.

num_parallel_worker

3

1–8

hilos

Cantidad de hilos paralelos utilizados para comprimir datos durante la escritura.

Herramientas auxiliares

Listar objetos coincidentes

oss_fdw_list_file devuelve el nombre y el tamaño de cada objeto de OSS que coincide con una tabla externa determinada.

Firma:

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

Parámetros:

Parámetro

Tipo

Descripción

relname

text

El nombre de la tabla externa.

schema

text

El esquema que contiene la tabla externa. El valor predeterminado es public.

Columnas de retorno:

Columna

Tipo

Descripción

name

text

La ruta completa del objeto de OSS, relativa a la raíz del bucket.

size

bigint

Tamaño del objeto en bytes.

Ejemplo:

SELECT * FROM oss_fdw_list_file('ossexample');

Salida:

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

Leer un solo objeto

oss_fdw.rds_read_one_file limita el escaneo de una tabla externa a un objeto específico. Aplica solo a importación.

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

Salida:

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

Restablezca este parámetro para reanudar el escaneo normal de múltiples objetos.

Proteja sus credenciales

Si los valores de id y key en CREATE SERVER se almacenan en texto plano, cualquier usuario de la base de datos con acceso a pg_foreign_server podrá leer su par de AccessKey:

SELECT * FROM pg_foreign_server;

Para proteger sus credenciales, utilice cifrado simétrico en los valores de id y key al crear el servidor. Utilice una clave de cifrado diferente para cada instancia de RDS. Cuando están cifrados, los valores aparecen como MD5**** en pg_foreign_server:

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

Cada valor cifrado comienza con MD5, y la longitud total dividida entre 8 es igual a 3. Una vez exportados los valores cifrados, no se vuelven a cifrar. No se pueden crear AccessKey IDs ni secrets que comiencen con MD5, ya que el prefijo de cifrado está reservado.

A diferencia de Greenplum, oss_fdw no admite agregar tipos de datos durante el cifrado, lo cual preserva la compatibilidad con versiones anteriores de PostgreSQL.

Notas de uso

  • Ubique su instancia de RDS y su bucket de OSS en la misma región para maximizar el rendimiento de importación y exportación. Consulte OSS domain names para obtener detalles sobre los endpoints.

  • oss_fdw lee y escribe únicamente en formato CSV, incluido CSV comprimido con gzip.

  • El rendimiento de la importación depende de la CPU, la E/S y la memoria disponibles en su instancia de RDS.

  • parse_errors solo es compatible con operaciones de lectura. No se permite configurarlo en una tabla externa de exportación.

  • filepath es solo para importación. Para exportación, utilice dir.

  • Las opciones filepath y dir son mutuamente excluyentes. Especifique exactamente una.

Solución de problemas

Error: oss endpoint not in allow list

Si ve el error ERROR: oss endpoint userendpoint not in aliyun white list al consultar una tabla externa, cambie al endpoint público de OSS para su región. Consulte Regions and endpoints.

Fallos de importación o exportación

Cuando una operación falla, OSS devuelve detalles del error en el registro de PostgreSQL:

Campo

Descripción

code

Código de estado HTTP de la solicitud con errores.

error_code

Código de error devuelto por OSS.

error_msg

Mensaje de error devuelto por OSS.

req_id

UUID de la solicitud con errores. Incluya este valor al enviar un ticket de soporte.

Para obtener una lista completa de códigos de error de OSS, consulte:

Los errores de tiempo de espera también pueden resolverse ajustando los parámetros de tolerancia a fallos en Parámetros del servidor.