使用 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
语句更快)。
您需要做两件事:
- 清理 SQL 文件
- 将其导入 CockroachDB(这听起来像您尝试过的,但我会在此处为任何需要它们的人提供这些步骤):
清理 SQL 文件
生成 .sql
文件后,您需要在导入之前执行一些编辑步骤:
- 从文件中删除除
CREATE TABLE
和 COPY
语句之外的所有语句。
手动将 table 的 PRIMARY KEY
约束添加到 CREATE TABLE
语句。
这必须手动完成,因为 PostgreSQL 试图在创建 table 之后添加主键,但 CockroachDB 要求在 table 创建时定义主键。
- 检查任何其他限制以确保它们正确地列在 table。
- 删除任何不受支持的元素,例如数组。
导入数据
重新格式化文件后,可以通过psql
导入:
$ psql -p [port] -h [node host] -d [database] -U [user] < [file name].sql
作为参考,CockroachDB 使用这些默认值:
[port]
: 26257
[user]
: root
从 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
语句更快)。
您需要做两件事:
- 清理 SQL 文件
- 将其导入 CockroachDB(这听起来像您尝试过的,但我会在此处为任何需要它们的人提供这些步骤):
清理 SQL 文件
生成 .sql
文件后,您需要在导入之前执行一些编辑步骤:
- 从文件中删除除
CREATE TABLE
和COPY
语句之外的所有语句。 手动将 table 的
PRIMARY KEY
约束添加到CREATE TABLE
语句。这必须手动完成,因为 PostgreSQL 试图在创建 table 之后添加主键,但 CockroachDB 要求在 table 创建时定义主键。
- 检查任何其他限制以确保它们正确地列在 table。
- 删除任何不受支持的元素,例如数组。
导入数据
重新格式化文件后,可以通过psql
导入:
$ psql -p [port] -h [node host] -d [database] -U [user] < [file name].sql
作为参考,CockroachDB 使用这些默认值:
[port]
: 26257[user]
: root