ATTACH/DETACH
DuckDB 和 SQLite 这类嵌入式数据库允许将一个新的数据库文件添加到当前连接中。
ATTACH
ATTACH 用于将一个新的数据库添加到当前连接中:
SQL
-- 新的 file.db 文件
ATTACH 'file.db';
-- 重命名一下,否则是 file
ATTACH 'file.db' AS file_db;
-- 只读
ATTACH 'file.db' (READ_ONLY);
-- 添加 sqlite 文件
ATTACH 'sqlite_file.db' AS sqlite_db (TYPE SQLITE);
-- 通过 file 前缀来应用新的数据库文件,如果指定了AS就用别名
CREATE TABLE file.new_table (i INTEGER);
SHOW DATABASES;
-- 修改默认的数据库,这样就不需要 file.new_table 了
USE file;
Tips
这其中比较特殊的就是 READ_ONLY,如果想要 ATTACH 位于只读磁盘中的 duckdb 文件时就必须指定该参数。
DETACH
用于分离数据库,比较简单:
DuckDB 多数据库支持
最初 DuckDB 只支持自己的数据库格式以及 Sqlite 数据库格式,而DuckDB 0.10 中引入了对 MySQL、Postgres 的支持:
SQL
-- 添加 postgres 通过 TYPE 指定类型
-- host: 主机名
-- port: 端口
-- user: 用户名
-- password: 密码
-- dbname: 数据库名称
ATTACH 'host=localhost port=5432 dbname=mydb' AS test (TYPE postgres);
SELECT * FROM test.tbl_name;
USE test;
SHOW TABLES;
也可以通过环境变量来指定上面的参数,这样就可以实现:
SQL
-- export PGPASSWORD="secret"
-- export PGHOST=localhost
-- export PGUSER=owner
-- export PGDATABASE=mydatabase
-- 自动接入,用的默认的 dbname
ATTACH '' AS p (TYPE postgres);
-- 也可以指定数据库名称
ATTACH 'dbname=postgresscanner' AS postgres_db (TYPE postgres);
一旦接入就可以使用标准的CREATE TABLE
来从 Postgres 中复制数据到 DuckDB 中: