DBAtlas · 数据库运维图谱

将数据生成为 INSERT 脚本

Oracle

-- DBMS_METADATA for object DDL
SELECT DBMS_METADATA.GET_DDL('TABLE','CUSTOMER') FROM dual;

-- Generating row data as INSERTs is not built in;
-- use SQL Developer 'Export > Insert' or SQLcl 'SET SQLFORMAT INSERT':
-- SET SQLFORMAT INSERT
-- SELECT * FROM customer;

Oracle 没有可将数据直接转换为现成 INSERT 脚本的 SQL 命令。DDL 使用 DBMS_METADATA.GET_DDL;行的 INSERT 使用 SQLcl(SET SQLFORMAT INSERT)或 SQL Developer 导出向导。

PostgreSQL

-- Data only, as INSERT statements
pg_dump --data-only --inserts --table=customer shop > insert.sql

-- With column names (more robust to schema differences)
pg_dump --data-only --column-inserts --table=customer shop > insert.sql

pg_dump --inserts 将每行写成单独的 INSERT;--column-inserts 还会加上列名(对 schema 差异更稳健)。默认(不带参数)生成 COPY 格式,加载速度快得多。

MySQL

-- Data only (INSERTs), without the table definition
mysqldump --no-create-info shop customer > insert.sql

-- One INSERT per row (more readable)
mysqldump --no-create-info --skip-extended-insert shop customer > insert.sql

mysqldump 默认生成 INSERT 语句;--no-create-info 跳过 CREATE TABLE,只输出数据。--skip-extended-insert 使每行成为单独的 INSERT(默认会把多行合并为一条语句)。

SQL Server

-- SSMS: right-click > Tasks > Generate Scripts >
--   Advanced > 'Types of data to script' = Data only (or Schema and data)

-- Command-line alternative (sqlpackage / mssql-scripter tool)
-- mssql-scripter -S server -d shop -t customer --data-only > insert.sql

SQL Server 没有用于此目的的内置 T-SQL 命令。最常用的方法是在 SSMS “生成脚本”向导中选择“仅限数据”。在命令行中,Microsoft 的 mssql-scripter 工具可通过 --data-only 生成 INSERT。

MongoDB

# Produces a binary/BSON backup instead of INSERT SQL
mongodump --db=shop --collection=customer --out=./backup

# As JSON text (can be adapted to insertMany)
mongoexport --db=shop --collection=customer --jsonArray --out=customer.json

没有 SQL INSERT 的概念。可移植的备份使用 mongodump(BSON,用 mongorestore 恢复)。如需嵌入代码的 insertMany,可使用 mongoexport --jsonArray 的输出。

Redis

# Portable serialization of a single key
DUMP customer:1
# The output is restored with RESTORE:
# RESTORE customer:1 0 "<dump-data>"

# RDB snapshot for all data
redis-cli --rdb dump.rdb

不会生成 SQL INSERT 脚本。按键使用 DUMP + RESTORE 序列化,全部数据使用 RDB(--rdb)文件。如需命令列表,用 SCAN 遍历并为每种类型构建相应的 SET/HSET 命令。

Elasticsearch

# The INSERT equivalent is _bulk NDJSON; produce it with elasticdump
elasticdump --input=http://localhost:9200/customer --output=customer_bulk.json --type=data

# Manual: converting a _search result to _bulk NDJSON requires an external script

不会生成 SQL INSERT;在 Elasticsearch 中,加载单位是 _bulk NDJSON。要以可重新加载的形式提取现有数据,使用 elasticdump(type=data);_search + PIT 的输出可通过外部脚本转换为 NDJSON。

在 DBAtlas 中打开 →