使用 CockroachDB 将 Postgres 转储导入 table

Import Postgres dump into a table with CockroachDB

从 PostgeSQL 执行 pg_dump 后,我试图将 .sql 文件导入 CockroachDB,但收到以下错误:

ERROR:  unknown variable: "STATEMENT_TIMEOUT"
ERROR:  unknown variable: "LOCK_TIMEOUT"
ERROR:  unknown variable: "IDLE_IN_TRANSACTION_SESSION_TIMEOUT"
SET
SET
ERROR:  unknown variable: "CHECK_FUNCTION_BODIES"
SET
ERROR:  unknown variable: "ROW_SECURITY"
SET
ERROR:  unknown variable: "DEFAULT_TABLESPACE"
ERROR:  unknown variable: "DEFAULT_WITH_OIDS"
CREATE TABLE
ERROR:  syntax error at or near "OWNER"

有指导吗?

CockroachDB 特别支持使用 psql,它支持 COPY 命令(比批处理的 INSERT 语句更快)。

您需要做两件事:

  1. 清理 SQL 文件
  2. 将其导入 CockroachDB(这听起来像您尝试过的,但我会在此处为任何需要它们的人提供这些步骤):

清理 SQL 文件

生成 .sql 文件后,您需要在导入之前执行一些编辑步骤:

  1. 从文件中删除除 CREATE TABLECOPY 语句之外的所有语句。
  2. 手动将 table 的 PRIMARY KEY 约束添加到 CREATE TABLE 语句。

    这必须手动完成,因为 PostgreSQL 试图在创建 table 之后添加主键,但 CockroachDB 要求在 table 创建时定义主键。

  3. 检查任何其他限制以确保它们正确地列在 table。
  4. 删除任何不受支持的元素,例如数组。

导入数据

重新格式化文件后,可以通过psql导入:

$ psql -p [port] -h [node host] -d [database] -U [user] < [file name].sql

作为参考,CockroachDB 使用这些默认值:

  • [port]: 26257
  • [user]: root