win11下wsl使用开发pg拓展并安装到docker全程记录

折腾了大半天,记录下rust开发pg拓展并安装到生产docker全程:

  1. 使用pgrx开发过程省略,注意和生产pg版本对上,我的是pg14

  2. 开发的终点是cargo pgrx package ,我的项目叫first,那么项目目录下 /target/release/first-pg14/usr/share/postgresql/14/extension/ 会生成一个sql和一个control文件, 同时/target/release/first-pg14/usr/lib/postgresql/14/lib 会生成so文件

  3. 启动dockers postgres

volumes:
# docker 和wsl共享/var/lib/docker/volumes/doc_pg/_data
  pg:

services:
  postgres:
    build: .
    # image: postgres
    # command: postgres -c config_file=/etc/postgresql.conf 
    container_name: mypg
    environment:
      POSTGRES_USER: "postgres"
      POSTGRES_PASSWORD: "你的密码"
    volumes:
       - pg:/var/lib/postgresql/data
    ports:
      - "5432:5432"
    # restart: always
  1. 拷贝三个文件
sudo docker cp  /mnt/d/myrust/pg_ext/first/target/release/first-pg14/usr/share/postgresql/14/extension/first.control  mypg:/usr/share/postgresql/14/extension/first.control

sudo docker cp /mnt/d/myrust/pg_ext/first/target/release/first-pg14/usr/share/postgresql/14/extension/first--0.0.0.sql  mypg:/usr/share/postgresql/14/extension/first--0.0.0.sql

sudo docker cp /mnt/d/myrust/pg_ext/first/target/release/first-pg14/usr/lib/postgresql/14/lib/first.so   mypg:/usr/lib/postgresql/14/lib/first.so

也可以用py脚本

import os
root="/mnt/d/myrust/pg_ext"
project="first"
version="14"
compile_dir=f"{root}/{project}/target/release/{project}-pg{version}"
src_control=f"{compile_dir}/usr/share/postgresql/{version}/extension/{project}.control"
src_sql=f"{compile_dir}/usr/share/postgresql/{version}/extension/{project}--0.0.0.sql"
src_so=f"{compile_dir}/usr/lib/postgresql/{version}/lib/{project}.so"

container="mypg"
tar_control=f"{container}:/usr/share/postgresql/{version}/extension/{project}.control"
tar_sql=f"{container}:/usr/share/postgresql/{version}/extension/{project}--0.0.0.sql"
tar_so=f"{container}:/usr/lib/postgresql/{version}/lib/{project}.so"


os.system(f"echo '密码' | sudo -S docker cp {src_control} {tar_control}")
os.system(f"echo '密码' | sudo -S docker cp {src_sql} {tar_sql}")
os.system(f"echo '密码' | sudo -S docker cp {src_so} {tar_so}")

5 进去psql安装

docker exec -it mypg psql -U postgres

SELECT * FROM pg_available_extensions; 显示看有无上面的first 

create extension first;注意是项目文件夹名称 ,重复安装先drop
drop extension first;
select hello_first();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值