跳转到主要内容

将Notion数据库导入PostgreSQL表

项目描述

当使用Notion数据库构建的系统达到足够规模时,会出现业务智能的需求。这需要从Notion中提取数据并将其加载到关系型数据库中。

原始作者没有找到方便的现成解决方案。提供从Notion同步到关系型数据库服务的服务依赖于笨拙的自动化,并涉及手动配置。

因此诞生了notion2pg。

它只做一件事:将任何Notion数据库转换为PostgreSQL表。它不需要任何配置。你在Notion中进行了更改?没关系,只需重新运行notion2pg以刷新表定义及其内容。

虽然notion2pg目前是alpha软件,但它成功导入了具有数十列和数千行的复杂数据库。它很可能会处理任何人类规模的Notion数据库。

快速入门

  1. 创建Notion集成.

  2. 与您的集成以及相关数据库共享Notion数据库。

  3. 创建PostgreSQL数据库,例如

    $ createuser notion
    $ createdb notion -O notion
  4. 安装notion2pg(需要Python ≥ 3.8)

    $ pip install notion2pg
  5. 将Notion和PostgreSQL凭据设置为环境变量,例如

    $ export NOTION_TOKEN=secret_...
    $ export POSTGRESQL_DSN="dbname=notion user=notion"
  6. 导入您的数据库,例如

    $ notion2pg <database_id> <table_name>

    其中 <database_id> 可以在数据库的URL中找到——它是一个类似于 858611286a7d43a197c7c0ddcc7d5a4f 的UUID,<table_name> 是任何有效的PostgreSQL表名。

命令行选项

--drop-existing

如果存在,则删除PostgreSQL表。如果您想反复导入表,覆盖任何先前的版本,这很有用。

版本化

将时间戳追加到PostgreSQL表的名称中。然后,创建一个指向该表的视图,这样它仍然可以在<table name>下被查询。如果您想反复导入表,但希望保留以前的版本,这很有用。

常见问题解答

为什么我的关系或汇总字段为空?

您的集成必须不仅有权访问您正在导入的表,还要访问涉及关系或汇总的每个表。

限制

  • 表中的列顺序没有被保留。此信息在Notion的API中不可用。

  • “显示原始”和“显示唯一值”的汇总被忽略。请导入相关的表并在您的查询中连接它。

  • 类型为“人员”的属性以人员ID导入,这可能不是最有用的表示。

  • 每次导入都是一个完整的副本。由于Notion的API速度不是特别快,实际限制大约为10,000行。

变更日志

0.1

  • 首次公开发布。

支持者