Airtable 是一个易于使用的在线平台,用于创建和共享关系型数据库。

Airtable 封装器允许您在 Postgres 数据库中读取您的 Airtable 基础/表中的数据。

准备

在开始之前,请确保您的数据库上安装了 wrappers扩展:

  create extension if not exists wrappers with schema extensions;
  

然后创建外部数据封装器:

  create foreign data wrapper airtable_wrapper
  handler airtable_fdw_handler
  validator airtable_fdw_validator;
  

安全保护您的凭证(可选)

默认情况下,Postgres 将 FDW 凭证以明文形式存储在 pg_catalog.pg_foreign_server 中。任何有权访问此表的人都能够查看这些凭证。封装器设计为与 Vault 配合使用,Vault 为存储凭证提供了额外的安全级别。我们建议您使用 Vault 存储您的凭证。

  -- Save your Airtable API key in Vault and retrieve the `key_id`
insert into vault.secrets (name, secret)
values (
  'airtable',
  '<Airtable API Key or PAT>' -- Airtable API key or Personal Access Token (PAT)
)
returning key_id;
  

连接到 Airtable

我们需要为 Postgres 提供连接到 Airtable 的凭证和任何额外的选项。我们可以使用 create server命令来完成这个操作:

使用Vault

     create server airtable_server
     foreign data wrapper airtable_wrapper
     options (
       api_key_id '<key_ID>' -- The Key ID from above.
     );
  

不使用Vault

      create server airtable_server
      foreign data wrapper airtable_wrapper
      options (
        api_url 'https://api.airtable.com/v0',  -- Airtable API url, optional
        api_key '<Airtable API Key or PAT>'  -- Airtable API key or Personal Access Token (PAT), required
      );
  

创建外部表

Airtable 封装器支持从 Airtable 的 Records 端点(只读)读取数据。

Airtable Select Insert Update Delete Truncate
Records

例如:

  create foreign table my_foreign_table (
  name text
  -- other fields
)
server airtable_server
options (
  base_id 'appXXXX',
  table_id 'tblXXXX'
);
  

外部表选项

完整的外部表选项如下:

  • base_id - 表所属的 Airtable 基础 ID,必需。
  • table_id - Airtable 表 ID,必需。
  • view_id - Airtable 视图 ID,可选。

查询下推支持

这个 FDW 不支持查询下推。

示例

一些关于如何使用 Airtable 外部表的示例。

基本示例

这将在您的 Postgres 数据库中创建一个名为 airtable_table 的“外部表”:

  create foreign table airtable_table (
  name text,
  notes text,
  content text,
  amount numeric,
  updated_at timestamp
)
server airtable_server
options (
  base_id 'appTc3yI68KN6ukZc',
  table_id 'tbltiLinE56l3YKfn'
);
  

现在可以从 Postgres 数据库中获取您的 Airtable 数据:

  select * from airtable_table;
  

我们还可以从名为 airtable_view 的 Airtable 视图中创建一个外部表:

  create foreign table airtable_view (
  name text,
  notes text,
  content text,
  amount numeric,
  updated_at timestamp
)
server airtable_server
options (
  base_id 'appTc3yI68KN6ukZc',
  table_id 'tbltiLinE56l3YKfn',
  view_id 'viwY8si0zcEzw3ntZ'
);

select * from airtable_view;