其中1921是PG的监听端口
1
|
docker run --platform linux/amd64 -dit -P --cap-add=SYS_PTRACE --cap-add SYS_ADMIN --privileged=true --name pg14 -p 1921:1921 -p 3000:3000 -p 8088:8080 -p 8112:80 -p 3301:3306 --shm-size=1g registry.cn-hangzhou.aliyuncs.com/digoal/opensource_database:pg14_with_exts
|
docker exec -it pg14 bash进入容器
psql进入数据库
执行ALTER ROLE postgres PASSWORD 'postgres';为数据库的postgres用户设置密码为postgres。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
--加载插件
CREATE EXTENSION duckdb_fdw;
--验证插件
select duckdb_fdw_version();
--确保数据库进程对duckdb数据库文件有访问权限,shell下执行
--chown -R postgres:postgres /share
--chmod -R 755 /share
--连接duckdb数据库文件
CREATE SERVER duckdb_server
FOREIGN DATA WRAPPER duckdb_fdw
OPTIONS (database '/share/test_emp.duckdb');
--删除外部服务器
drop server duckdb_server;
--创建外部表-方法1
CREATE FOREIGN TABLE duckdb_tb_emp (
EmployeeID integer,
Name text,
Phone integer,
Position text,
DeptID integer
)
SERVER duckdb_server
OPTIONS (table 'emp');
--创建外部表-方法2:自动映射 执行下面语句后,DuckDB 数据库中的所有表将被自动映射为 PostgreSQL 中的外部表,你可以像查询普通表一样查询这些外部表。
IMPORT FOREIGN SCHEMA main
-- 指定映射哪些表
-- limit to (dpt)
FROM SERVER duckdb_server
INTO public;
--正常使用表
select * from emp limit 10;
-- 调用duckdb执行sql语句
select duckdb_execute('duckdb_server','CREATE TABLE dpt AS (SELECT * FROM ''/share/dpt.csv'');');
-- 断开连接(再次执行相关sql就会自动再此连接,比如执行select * from emp limit 10;)
select duckdb_fdw_disconnect_all();
-- 列出当前所有连接
select duckdb_fdw_get_connections();
|