Um foreign data wrapper (FDW) é uma extensão do PostgreSQL que permite consultar dados de fontes externas como se fossem tabelas locais. No GanosBase, a extensão FDW adiciona suporte a dados espaciais e mapeia automaticamente tipos de dados espaciais geométricos para o tipo Geometry. Assim, você executa consultas espaciais em tabelas estrangeiras e locais na mesma instrução.
Este guia demonstra como registrar um shapefile do OSS como tabela estrangeira e consultá-lo no cluster PolarDB for PostgreSQL.
Como funciona
O FDW do GanosBase utiliza um modelo de três camadas:
Extensão: instale a funcionalidade FDW no banco de dados (
ganos_fdw, além das dependênciasganos_spatialrefeganos_geometry).Servidor estrangeiro: objeto de conexão nomeado que aponta para a fonte de dados externa (neste caso, o bucket do Object Storage Service (OSS)).
Tabela estrangeira: tabela virtual mapeada para um arquivo ou conjunto de dados específico no servidor estrangeiro. Ela não possui armazenamento local, mas comporta-se como uma tabela comum nas consultas.
Pré-requisitos
Antes de começar, verifique se você tem:
Um cluster PolarDB for PostgreSQL com o GanosBase em execução.
Um bucket do OSS contendo um shapefile com pelo menos três arquivos —
.shp,.shxe.dbf— carregados na mesma pasta.O bucket do OSS e o cluster PolarDB na mesma região, conectados via endpoint interno.
Um par de AccessKey (AccessKey ID e AccessKey secret) com acesso de leitura ao bucket do OSS. Para obter um par de AccessKey, consulte Obter um par de AccessKey.
Configurar e consultar uma tabela estrangeira
Etapa 1: Instale a extensão Ganos_FDW
Escolha um dos métodos a seguir.
Método 1 (recomendado): Instalação com CASCADE
A opção CASCADE instala automaticamente as dependências necessárias (ganos_spatialref e ganos_geometry):
CREATE EXTENSION ganos_fdw WITH schema public CASCADE;
Instale a extensão no schema public para evitar problemas de permissão.
Método 2: Instalação manual das dependências
Para controlar a ordem de instalação, execute os três comandos em sequência:
CREATE EXTENSION ganos_spatialref;
CREATE EXTENSION ganos_geometry;
CREATE EXTENSION ganos_fdw;
Etapa 2: Registrar um shapefile como tabela estrangeira
2a. Registrar o shapefile
Use ST_RegForeignTables para registrar o shapefile do OSS como tabela estrangeira. Substitua os espaços reservados pelos valores reais:
SELECT ST_RegForeignTables('OSS://<access_id>:<secret_key>@[<endpoint>]/<bucket>/path/to/file');
|
Espaço reservado |
Descrição |
|
|
Seu AccessKey ID |
|
|
Seu AccessKey secret |
|
|
Endpoint interno do OSS para sua região. Para formatos de endpoint, consulte Nomes de domínio do OSS |
|
|
Caminho para o diretório do shapefile no bucket do OSS |
Use o endpoint interno do OSS para garantir a conectividade entre o cluster PolarDB e o bucket do OSS. Ambos devem estar na mesma região.
2b. Verifique o registro da tabela estrangeira
Consulte a view information_schema.foreign_tables para confirmar o registro:
SELECT foreign_table_name FROM information_schema.foreign_tables ORDER BY foreign_table_name ASC;
Etapa 3: Consultar a tabela estrangeira
Execute uma consulta espacial na tabela estrangeira. O exemplo a seguir recupera a geometria e os atributos de um registro específico:
SELECT fid, ST_AsText(geom), name, age, height FROM poly WHERE fid = 1;
Saída esperada:
fid | ST_AsText(geom) | name | age | height
------+----------------------------------+-----------+-----+--------
1 | POLYGON((5 0,0 0,0 10,5 10,5 0)) | ZhangShan | 35 | 1.84
Etapa 4: Importar os dados da tabela estrangeira para uma tabela local
Selecione o método adequado ao seu cenário.
Se não houver tabela local
Crie uma tabela local e popule-a com dados da tabela estrangeira em uma única etapa:
CREATE TABLE poly_db AS SELECT * FROM poly;
Se já existir uma tabela local
Escolha um dos métodos a seguir para importar os dados:
-
INSERT INTO ... SELECT: anexa linhas da tabela estrangeira à tabela local existente.
INSERT INTO poly_db SELECT * FROM poly; -
IMPORT FOREIGN SCHEMA: importa todo o schema estrangeiro para um schema local.
CREATE SCHEMA imp; IMPORT FOREIGN SCHEMA ganos_fdw FROM SERVER ganos_fdw_server INTO imp;
Etapa 5 (Opcional): Remover a extensão
Para desinstalar o Ganos_FDW e remover todos os objetos dependentes, execute:
DROP EXTENSION Ganos_FDW CASCADE;
A opção CASCADE remove todas as tabelas estrangeiras e outros objetos dependentes da extensão. Certifique-se de que esses recursos não são mais necessários antes de executar este comando.