postgresql_docker_builder容器的使用

其中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();