Linux下pgloader3.6.9安装避坑指南:从依赖缺失到编译成功

保姆级教程:在CentOS上搞定pgloader3.6.9安装及常见报错解决 本文提供了一份详细的CentOS系统上安装pgloader 3.6.9的保姆级教程,涵盖从环境准备、依赖安装到编译部署的全过程,并针对常见的SBCL缺失、libsybdb错误等疑难问题提供了解决方案,帮助开发者高效完成数据库迁移任务。 阅读详情

Linux下pgloader 3.6.9安装避坑指南:从依赖缺失到编译成功

最近在折腾一个数据库迁移项目,需要把几个老旧的MySQL实例里的数据,规整地搬到PostgreSQL里。市面上工具不少,但论灵活性和对复杂数据类型的支持,pgloader一直是我的首选。它用Common Lisp写成,性能强悍,配置也足够直观。不过,它的安装过程,尤其是从源码编译,对不少朋友来说可能是个“劝退”环节。我这次在CentOS 7和Ubuntu 20.04上都走了一遍,把从下载到成功运行过程中踩的坑、绕的路,以及最终找到的“捷径”都梳理了出来。这份指南不只是步骤的罗列,更侧重于解释为什么会出错,以及如何系统性地解决依赖问题,目标是让你下次再遇到类似编译问题,能自己举一反三。

1. 环境准备与依赖全景图

在动手敲下第一个命令之前,花几分钟理解pgloader的依赖生态,能省下后面几小时的折腾时间。pgloader本质上是一个用Common Lisp编写的应用程序,它通过make系统来驱动构建过程。这个构建过程并不像普通的C程序那样简单./configure && make,它更像是在搭建一个微型的Lisp运行时环境,并在这个环境中编译出最终的可执行二进制文件。

因此,它的依赖可以分为三个层次:

  1. 构建系统依赖:即make、gcc等基础编译工具链。
  2. Lisp运行时依赖:核心是SBCL (Steel Bank Common Lisp),它是pgloader的“编译器”和“运行时”。没有它,构建过程根本无法启动。
  3. 数据库客户端库依赖:这是pgloader实现其核心功能——连接各种数据源——所必需的。例如:
    • libsybdb / FreeTDS:用于连接SQL Server和Sybase数据库。
    • MySQL客户端库:用于连接MySQL/MariaDB。
    • SQLite3库:用于连接SQLite数据库。
    • PostgreSQL客户端库 (libpq):用于连接目标PostgreSQL数据库(这个通常系统已装)。

很多安装失败,都源于对第二层和第三层依赖的不了解或遗漏。下面这个表格帮你快速理清主流Linux发行版上需要安装的包:

依赖类别CentOS / RHEL / Rocky Linux / AlmaLinux (使用 yum)Ubuntu / Debian (使用 apt)作用说明
构建工具make gcc git patch unzipmake gcc git patch unzip基础编译环境。
Lisp运行时sbcl (需通过EPEL仓库)sbcl核心依赖,提供Common Lisp编译环境。
数据库客户端库freetds-devel mariadb-devel sqlite-devel postgresql-devel openssl-develfreetds-dev libmariadb-dev libsqlite3-dev libpq-dev libssl-dev使pgloader能够连接各类源数据库。名称后缀-devel或-dev代表开发头文件,必须安装。

提示:在生产服务器上操作前,建议先在测试环境完整走一遍流程。如果服务器无法连接外网,你需要提前下载好所有依赖包的RPM或DEB文件进行离线安装,这会复杂很多。

对于CentOS系列,首先需要确保EPEL(Extra Packages for Enterprise Linux)仓库已启用,这是获取sbcl等软件的关键:

# CentOS/RHEL 7/8
sudo yum install -y epel-release
# 或者 Rocky/AlmaLinux 8+
sudo dnf install -y epel-release

然后,可以一次性安装大部分开发依赖(以CentOS为例):

sudo yum groupinstall -y "Development Tools"
sudo yum install -y sbcl freetds-devel mariadb-devel sqlite-devel postgresql-devel openssl-devel git unzip

对于Ubuntu/Debian系列,步骤更直接:

sudo apt update
sudo apt install -y make gcc sbcl freetds-dev libmariadb-dev libsqlite3-dev libpq-dev libssl-dev git unzip

完成上述步骤,你的系统才算是为编译pgloader做好了“热身”。这步做扎实了,后续的报错会少一大半。

2. 获取源码与解压的艺术

官方推荐的安装方式是使用打包好的pgloader-bundle。这个Bundle非常贴心,它已经包含了pgloader本身及其所有Lisp语言的依赖项(如quicklisp包管理器、cffi、cl+ssl等),避免了你在构建过程中还需要联网下载Lisp库的麻烦,对于内网环境尤其友好。

下载和解压本身很简单,但有几个细节值得注意:

# 1. 使用wget或curl下载Bundle包
wget https://github.com/dimitri/pgloader/releases/download/v3.6.9/pgloader-bundle-3.6.9.tgz
# 或者
curl -L -o pgloader-bundle-3.6.9.tgz https://github.com/dimitri/pgloader/releases/download/v3.6.9/pgloader-bundle-3.6.9.tgz

# 2. 解压到当前目录
tar -zxvf pgloader-bundle-3.6.9.tgz

# 3. 进入解压后的目录
cd pgloader-bundle-3.6.9

进入目录后,你会看到类似这样的结构:

pgloader-bundle-3.6.9/
├── bin/
├── build/
├── local-projects/   # 这里包含了pgloader的源码
│   └── pgloader-3.6.9/
├── Makefile
├── patches/
└── ... (其他配置和依赖文件)

注意:整个构建过程都将在pgloader-bundle-3.6.9目录内完成,不要尝试进入local-projects/pgloader-3.6.9/子目录去执行make,那样会失败。顶层的Makefile是统筹整个构建流程的入口。

3. 编译过程详解与排错实战

现在来到核心环节:执行make pgloader。这个过程可能会一帆风顺,更可能会遇到几个经典的错误。我们逐一拆解。

3.1 第一关:SBCL缺失

这是最常遇到的第一个错误。

$ make pgloader
...
make: sbcl: Command not found
Makefile:30: recipe for target 'bin/pgloader' failed
make: *** [bin/pgloader] Error 127

错误解读:make脚本试图调用sbcl命令来启动Lisp编译环境,但系统里找不到这个命令。

解决方案:正如我们在第一章准备的,安装sbcl。请根据你的发行版选择命令。安装后,可以通过sbcl --version验证。

深入一点:为什么一定是SBCL?因为pgloader的Bundle和Makefile就是为SBCL优化的。Common Lisp有其他实现(如CLISP),但兼容性和性能可能有问题,不推荐替换。

3.2 第二关:数据库客户端库缺失(以FreeTDS为例)

安装好sbcl后再次make,很可能遇到第二个坎:

$ make pgloader
...
Unhandled CFFI:LOAD-FOREIGN-LIBRARY-ERROR in thread #<SB-THREAD:THREAD "main thread" RUNNING {1001870103}>:
  Unable to load foreign library (LIBTDSODBC).
  Error opening shared object "libsybdb.so.5":
  libsybdb.so.5: cannot open shared object file: No such file or directory.

错误解读:Lisp代码在编译时,通过CFFI(Common Foreign Function Interface)尝试加载一个名为libsybdb.so.5的C语言动态链接库。这个库是FreeTDS项目的一部分,用于连接SQL Server/Sybase。系统找不到这个库文件。

解决方案:安装FreeTDS的开发包。注意,只安装freetds可能不够,因为它可能只包含运行时库。我们需要的是包含libsybdb.so链接和头文件的开发包。

  • CentOS: sudo yum install -y freetds-devel
  • Ubuntu: sudo apt install -y freetds-dev

安装后,关键的库文件通常会在/usr/lib64/或/usr/lib/x86_64-linux-gnu/下出现(例如libsybdb.so.5)。

类似问题:如果你未来需要从MySQL迁移数据,但没装MySQL客户端库,可能会看到找不到libmariadb.so或libmysqlclient.so的错误。同理,需要安装mariadb-devel或libmariadb-dev。

3.3 第三关:其他潜在依赖问题

解决了上述两个主要问题,编译通常就能成功了。但如果你的环境比较“干净”,还可能遇到:

  • OpenSSL库缺失:错误信息可能提及libssl.so或libcrypto.so。确保安装了openssl-devel(CentOS)或libssl-dev(Ubuntu)。
  • SQLite库缺失:如果你需要加载SQLite文件。安装sqlite-devel或libsqlite3-dev。
  • 内存不足:SBCL在编译大型Lisp项目时可能消耗较多内存。如果是在小内存的VPS或容器内编译,可能会失败。尝试增加交换空间(swap):
    # 创建一个2GB的交换文件(如果已有可跳过)
    sudo fallocate -l 2G /swapfile
    sudo chmod 600 /swapfile
    sudo mkswap /swapfile
    sudo swapon /swapfile
    # 编译完成后,可以关闭并删除:sudo swapoff /swapfile && sudo rm /swapfile
    

3.4 编译成功与验证

当所有依赖都满足后,再次运行make pgloader,你会看到大量Lisp编译信息滚动,最后以类似下面的信息结束:

...
;; loading system "pgloader"
compressed 0 bytes into 8 at level -1
compressed 32768 bytes into 630 at level -1
...
compressed 131792896 bytes into 20821046 at level -1
 that's ugly, but necessary when building on Windows :(
mv bin/pgloader.tmp bin/pgloader

看到最后一行mv命令执行,并且没有红色错误信息,就说明编译成功了!此时在./bin/目录下会生成一个名为pgloader的独立二进制文件。

你可以立即在当前目录测试它:

./bin/pgloader --version

如果输出类似pgloader version "3.6.9",那么恭喜你,最艰难的部分已经过去了。

4. 安装、配置与基础使用

编译出的pgloader二进制文件是自包含的,你可以把它放在任何地方运行。但为了使用方便,通常我们会把它安装到系统的标准路径下。

4.1 安装到系统路径

# 将pgloader复制到/usr/local/bin,这是存放用户级可执行程序的常见位置
sudo cp ./bin/pgloader /usr/local/bin/

# 验证安装
pgloader --version

现在,你可以在系统的任何位置直接使用pgloader命令了。

4.2 编写你的第一个迁移命令文件

pgloader的强大之处在于其声明式的命令文件。它比单纯用命令行参数更清晰、可重复。假设我们要从本地的MySQL数据库source_db迁移my_table到PostgreSQL的target_db。

创建一个文件,例如migrate.load:

# migrate.load
LOAD DATABASE
     FROM      mysql://username:password@localhost/source_db
     INTO      postgresql://username:password@localhost/target_db

 WITH include drop, create tables, create indexes, reset sequences,
      workers = 8, concurrency = 1,
      multiple readers per thread, rows per range = 50000

 CAST type datetime to timestamptz drop default drop not null using zero-dates-to-null,
      type date drop default drop not null using zero-dates-to-null

 MATERIALIZE VIEWS my_view1, my_view2

 INCLUDING ONLY TABLE NAMES MATCHING 'my_table', 'another_table'
;

这个命令文件做了几件事:

  • FROM/INTO:定义数据源和目标。
  • WITH:设置加载行为,如删除目标表、并行 workers 数等。
  • CAST:处理类型转换,这里将MySQL的datetime和date类型中的0000-00-00零值转换为PostgreSQL的NULL。
  • MATERIALIZE VIEWS:将MySQL的视图作为表迁移到PostgreSQL。
  • INCLUDING ONLY TABLE NAMES MATCHING:只迁移指定的表,支持通配符。

4.3 执行迁移

运行迁移命令非常简单:

pgloader migrate.load

pgloader会启动,解析命令文件,建立连接,然后开始迁移。它会输出详细的日志,包括每个步骤的耗时、数据行数、可能出现的警告等。迁移结束后,务必仔细查看输出的总结报告,确认没有失败的表或严重的类型转换错误。

4.4 性能调优与常见参数

对于大数据量迁移,几个参数对性能影响很大:

  • workers:设置并行加载的工作进程数。通常可以设置为CPU核心数。
  • concurrency:控制从源数据库读取数据的并发线程数。对于MySQL,设置为1通常更稳定;对于文件(如CSV),可以增加。
  • batch rows:每个批次插入的行数。默认是25000,如果内存充足,可以适当增加(如50000)以提高吞吐。
  • prefetch rows:预取的行数。增加此值可以提高读取速度,但会增加内存使用。

一个针对大数据量优化的WITH子句可能长这样:

WITH include drop, create tables, create indexes, reset sequences,
     workers = 8, concurrency = 1,
     batch rows = 50000, batch size = 50 MB,
     prefetch rows = 100000,
     multiple readers per thread, rows per range = 100000

5. 进阶场景与故障排查

5.1 从CSV文件加载

pgloader处理CSV文件同样出色。假设有一个data.csv文件,第一行是列名。

# csv.load
LOAD CSV
     FROM 'path/to/data.csv' (field1, field2, field3)
     INTO postgresql:///target_db?tablename=target_table
     TARGET COLUMNS (col1, col2, col3)

 WITH skip header = 1,
      fields terminated by ',',
      fields optionally enclosed by '"',
      fields escaped by double-quote,
      truncate,
      batch rows = 10000;

5.2 处理迁移中的错误

迁移很少能一次完美成功。pgloader默认会在遇到第一个错误时停止。你可以修改这个行为:

WITH ...,
     on error stop,  -- 默认值,遇到错误停止
     -- 或者
     on error resume next  -- 跳过错误行,继续执行(需谨慎!)

更推荐的做法是使用--verbose和--debug选项运行,将详细日志输出到文件进行分析:

pgloader --verbose --debug migrate.load 2>&1 | tee migration.log

常见的错误包括:

  • 连接失败:检查数据库URL、网络、防火墙、用户权限。
  • 数据类型不兼容:仔细检查CAST规则,可能需要自定义转换函数。
  • 外键或唯一约束冲突:确保源数据是干净的,或者调整加载顺序(先加载父表,再加载子表)。

5.3 使用Docker绕过安装难题

如果你觉得编译安装太麻烦,或者需要在不同环境快速使用,Docker是最推荐的替代方案。官方提供了pgloader的Docker镜像,开箱即用。

# 拉取最新镜像
docker pull dimitri/pgloader:latest

# 运行一个简单的迁移(假设命令文件在当前目录)
docker run --rm -v $(pwd):/data dimitri/pgloader:latest pgloader /data/migrate.load

# 更复杂的例子:允许容器访问宿主机的数据库网络
docker run --rm --network host -v $(pwd):/data dimitri/pgloader:latest pgloader /data/migrate.load

Docker方式几乎免除了所有依赖安装的烦恼,特别适合在CI/CD流水线或临时环境中使用。镜像内已经包含了所有必需的数据库客户端库。

编译安装pgloader的过程,像是一次对开源软件依赖管理的微型实习。它教会你的不仅仅是几条命令,更是一种排查思路:当编译失败时,首先看错误信息,定位缺失的库或命令;然后理解这个库属于哪个层次(构建工具、运行时、功能库);最后利用系统包管理器精准安装。掌握了这个方法,今后面对任何从源码编译的软件,你都能更有底气。至于选择编译安装还是Docker,我的建议是,如果你需要深度定制或研究其代码,那就编译;如果只是作为工具使用,Docker镜像无疑是更高效、更干净的选择。

pgloader3.6.9安装全攻略:从下载到验证的完整流程 本文详细介绍了pgloader 3.6.9的安装全流程,从环境准备、依赖安装到编译验证,帮助开发者高效完成数据迁移工具的部署。通过分步指导和常见问题解决方案,确保用户能够顺利安装并验证pgloader的功能,适用于各种数据库迁移场景。 阅读详情

相关推荐

pgloader3.6.9安装与常见问题解决指南

本文详细介绍了pgloader 3.6.9的安装教程与常见问题解决方案。内容涵盖从系统环境准备、依赖安装、编译步骤到最终的系统部署,并针对安装过程中可能遇到的sbcl缺失、libsybdb库错误等典型问题提供了清晰的排查思路和修复方法,帮助用户顺利完成这款高效数据迁移工具的安装与配置。

perl8的博客 380

make: command not found 解决办法

make: command not found 解决办法-优快云博客。

weixin_44012667的博客 428

保姆级教程:在CentOS上搞定pgloader 3.6.9安装及常见报错解决

本文提供在CentOS系统上安装pgloader 3.6.9的详细教程,涵盖从环境准备到编译安装的全流程,特别针对常见依赖问题和报错提供解决方案。通过分步指导和实战技巧,帮助用户高效完成数据库迁移工具的部署与配置。

c2d3e4f的博客 531

make:command not found

今天在安装nginx时候,执行编译时报错,make:command not found。本来只需要安装make命令即可,但是百度了一下,需要安装gcc等。安装之后执行make以及make install就没有问题了。原因就是Linux系统是纯净版,或者没有预安装一些环境。

TS_forever007的博客 2366

pgloader3.6.9安装教程

pgloader3.6.9安装教程

weixin_46062349的博客 3213

FPGA远程升级避坑实录:用STARTUPE2原语搞定Flash时钟,K7325T实测有效

本文深入解析了FPGA远程升级中的STARTUPE2原语应用,特别针对K7325T芯片的Flash时钟问题提供了实测有效的解决方案。通过详细的原语工作机制、Vivado工程实现步骤及调试技巧,帮助工程师规避常见陷阱,提升远程升级的可靠性和效率。

weixin_42558093的博客 141

DXVK 使用指南:在 Linux 上把 Direct3D 游戏跑在 Vulkan 上

Windows 老游戏调用 Direct3D(微软的图形 API,下称 D3D),而 Linux 桌面提供的是 Vulkan(跨平台底层图形 API),两边接口对不上,游戏就卡在第一步。DXVK 是一个基于 Vulkan 的 D3D8/9/10/11 翻译层:拦截 D3D 调用并改写成 Vulkan 命令。它适合想在 Linux 或 Wine 上玩老 D3D 游戏的人,也适合想弄清"翻译层怎么写"

gitblog_00784的博客 909

宝塔面板全栈部署指南:Node后端+React前端与数据库配置实战

本文提供了一份详尽的宝塔面板全栈部署实战指南,涵盖Node.js后端、React前端与数据库的完整配置流程。文章深入解析了环境准备、数据库创建与导入、Node服务部署、PM2进程守护、React应用构建与托管,以及线上环境变量管理与安全配置等核心步骤,帮助开发者高效、稳定地将项目部署至生产环境。

weixin_29232121的博客 89

开拓者:正义之怒 Build 指南:25+职业 BD 攻略全收录,从开卡到毕业直接抄

贴吧老帖版本混杂,抄回来一套 Build,术语(BAB、环数、AB)一个看不懂,玩到一半发现打法早被版本修复——这是新手开档最大的时间黑洞。Wotr-BD-LR 把主角 Build 按职业、道途、版本系统归档,每条 BD 标注当前版本状态,从开卡教学到毕业装备截图全部就位,拿来就能抄。 ## 10 分钟定好开局顺序:打开仓库先看哪三个文件 1. **先读 [《开拓者:正义之怒》进阶手册.md]

gitblog_00343的博客 726

2024最新指南:如何用Python批量下载Sentinel-2数据(附避坑清单)

本文提供2024年最新Python批量下载Sentinel-2遥感数据的完整指南,涵盖环境配置、API准备、核心下载流程实现及实战避坑清单。通过智能查询器、断点续传下载器等实用工具,帮助用户高效获取遥感数据,避免常见网络问题和数据完整性验证失败。

silver的专栏 618

Windows11 下 Detectron2 的安装与配置全攻略

本文提供了在Windows11系统下安装和配置Detectron2的完整教程。详细介绍了从环境准备、创建虚拟环境、安装PyTorch与CUDA,到修改源码、编译安装以及运行验证Demo的全过程,帮助开发者克服Windows平台上的常见问题,成功部署这一强大的计算机视觉库。

weixin_29081703的博客 246

Django 项目上线前服务器准备全流程:从系统配置到数据库与静态文件

在 Web 应用部署中,服务器环境配置是保障项目稳定运行的基础环节。其核心原理在于通过操作系统、运行环境、数据库和文件服务的合理规划,实现应用与基础设施的解耦。技术价值体现在提升安全性、可维护性与性能表现。典型应用场景包括中小型 Django 项目的生产环境搭建。具体涉及 Linux 系统初始化与安全加固、Python 虚拟环境与依赖管理、PostgreSQL 数据库安装与权限配置、静态文件与媒体文件的目录规划及 Nginx 服务配置。这些步骤共同构成了 Django 部署前服务器准备的关键路径。

weixin_33816946的博客 240

基于Simulink与MATLAB的七轴OpenArm机械臂逆运动学仿真与轨迹规划完整指南

本文详细介绍了七自由度OpenArm机械臂在MATLAB/Simulink环境下的运动学仿真与轨迹规划实现方法。首先建立了机械臂的DH参数模型,验证了正运动学计算;随后提出了两种逆运动学求解算法(数值迭代法和臂型角参数化解析法)的MATLAB实现方案;最后在Simulink中搭建了完整的轨迹规划与控制系统。研究解决了七自由度冗余机械臂特有的多解性、奇异性和关节限位约束等核心问题,为OpenArm机械臂的运动控制提供了完整的技术方案和可运行代码实现。

AI的内部世界的博客 681

PostgreSQL与MySQL命令行导入实战:编码、安全与性能全解析

数据库批量导入是数据工程的基础能力,其核心在于理解SQL标准加载机制(如COPY和LOAD DATA)背后的字符编码处理、权限控制模型与I/O调度原理。掌握UTF-8/BOM/GBK等编码转换、local_infile安全边界、分区表兼容性等关键技术,不仅能规避90%的导入失败,更能支撑高可靠数据管道建设。本文聚焦生产级CSV导入场景,覆盖PostgreSQL COPY参数精调、MySQL LOAD DATA安全启用、跨平台路径与换行符适配,并深度融合iconv、sed、csvkit等工程化预处理工具链,为

weixin_33800463的博客 383

药物对接仿真软件:HADDOCK_(5).HADDOCK中蛋白质-配体对接流程

半柔性能量最小化阶段是在刚体能量最小化的基础上,允许配体的部分柔性,通过优化配体的构象来进一步提高对接的准确性。半柔性能量最小化阶段是在刚体能量最小化的基础上,允许配体的部分柔性,通过优化配体的构象来进一步提高对接的准确性。如果是PDB格式,确保文件包含所有必要的原子信息。对接完成后,HADDOCK会生成一系列的输出文件,包括对接后的蛋白质-配体复合物结构文件、能量评分文件和统计分析文件。对接完成后,HADDOCK会生成一系列的输出文件,包括对接后的蛋白质-配体复合物结构文件、能量评分文件和统计分析文件。

kkchenjj的博客 1081

Python 爬虫实战:爬虫与 ECharts 结合 —— 前端可视化展示

本文介绍了爬虫技术与ECharts可视化结合的完整实现流程。首先使用Python爬取京东商品数据(价格、评价数等),通过BeautifulSoup解析和pandas处理转换为JSON格式。然后构建前端页面,利用ECharts实现价格分布柱状图、价格-评价数散点图和店铺占比饼图三种可视化效果。文章详细解析了爬虫数据提取、格式转换和前端图表配置等关键技术点,并提供了完整的代码示例。最后提出了基于API接口、数据库存储等扩展方向,为数据采集到可视化展示提供了完整的解决方案。

2503_91057718的博客 631

CLI-Anything:面向开发者的智能命令行代理

命令行代理(CLI Agent)是一种新兴的终端交互范式,它通过意图解析与工具编排,将自然语言指令转化为跨工具的自动化操作。其核心原理在于构建轻量级、上下文感知的‘语义翻译层’,而非替代传统命令;技术价值体现在降低组合任务门槛、提升环境鲁棒性与插件化扩展能力。典型应用场景包括多工具协同运维、IDE/笔记系统联动、CI/CD流程压缩等。CLI-Anything 作为 Python 实现的 agent-native CLI 运行时,强调零学习成本、沙箱执行与渐进式降级,代表了从‘哑终端’到‘可理解终端’的关键演

weixin_28221501的博客 195

YOLOv11涨点改进 | 全网创新首发、主干改进篇 | CVPR 2025 | RAVLT主干让 YOLOv11 更加强大!通过增强线性注意力机制,特别在小目标和复杂背景的检测上表现突出

本文提出RAVLT主干网络,通过改进YOLOv11的空间特征建模能力,显著提升小物体和复杂背景检测性能。RAVLT采用秩增强线性注意力(RALA)机制,在保持线性计算复杂度的同时解决传统线性注意力低秩问题。RALA通过增强KV缓冲区和输出特征矩阵的秩,提高特征多样性和建模能力。实验表明,RAVLT在ImageNet-1k上达到84.4% Top-1准确率,仅需2600万参数和4.6GFLOPs,性能优于现有线性注意力模型。文章详细介绍了RAVLT模块结构、实现原理及在YOLOv11中的集成方法,包含四种主干

Ai缝合怪、助力小伙伴高效发论文 637

MySQL到PostgreSQL迁移实战:在线客服系统兼容适配手记

多数据库兼容是现代应用开发中的常见需求,尤其随着私有化部署和云环境多样性,企业常面临从MySQL到PostgreSQL的迁移挑战。理解两种数据库在SQL方言、事务隔离级别、索引策略和数据类型上的核心差异,是保障迁移后数据一致性与查询性能的关键。通过对比MVCC与锁机制、AUTO_INCREMENT与序列、JSONB与JSON等底层原理,开发者可以设计出兼顾两套数据库的数据访问层。结合在线客服系统中会话、工单等高频写入与复杂查询场景,本文沉淀了索引策略迁移、连接池参数调整、UPSERT方言适配及死锁排查等实践

weixin_33483304的博客 194

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

PostgreSQL备份之手工备份(Low Level API)

为什么80%的码农都做不了架构师?>>> ...

weixin_34319640的博客 145

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Pgloader极简教程

合集 - 中间件(8)1.SpringBoot整合MinIO2023-09-132.Nginx安装nginx-rtmp-module模块03-133.OBS+Nginx+VLC推拉流03-134.Redis的未来04-085.阿里DataX极简教程05-166.安装nginx-http-flv-module模块09-237.Mysql高可用架构方案11-118.Pgloader极简教程11-20收...

weixin_41428287的博客 734

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain&#39;s apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath(&#39;DeepLearnToolbox&#39;));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand(&#39;state&#39;,0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W&#39;); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand(&#39;state&#39;,0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = &#39;sigm&#39;;%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, &#39;Too big error&#39;);```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand(&#39;state&#39;,0)sae = saesetup([784 100]);sae.ae{1}.activation_function = &#39;sigm&#39;;sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)&#39;)% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = &#39;sigm&#39;;nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, &#39;Too big error&#39;);```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x&#39;,28,28,60000))/255;test_x = double(reshape(test_x&#39;,28,28,10000))/255;train_y = double(train_y&#39;);test_y = double(test_y&#39;);%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you&#39;ll get around 1.2% errorrand(&#39;state&#39;,0)cnn.layers = { struct(&#39;type&#39;, &#39;i&#39;) %input layer struct(&#39;type&#39;, &#39;c&#39;, &#39;outputmaps&#39;, 6, &#39;kernelsize&#39;, 5) %convolution layer struct(&#39;type&#39;, &#39;s&#39;, &#39;scale&#39;, 2) %sub sampling layer struct(&#39;type&#39;, &#39;c&#39;, &#39;outputmaps&#39;, 12, &#39;kernelsize&#39;, 5) %convolution layer struct(&#39;type&#39;, &#39;s&#39;, &#39;scale&#39;, 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, &#39;Too big error&#39;);```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, &#39;Too big error&#39;);%% ex2 neural net with L2 weight decayrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);%% ex3 neural net with dropoutrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);%% ex4 neural net with sigmoid activation functionrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);nn.activation_function = &#39;sigm&#39;; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);%% ex5 plotting functionalityrand(&#39;state&#39;,0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = &#39;softmax&#39;; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand(&#39;state&#39;,0)nn = nnsetup([784 20 10]); nn.output = &#39;softmax&#39;; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

linux 下编译提示报错 make:command not found

问题:运行 build.sh之后报错,make:command not found 安装 make 时发现 make 已经安装成功了 解决办法: 原来是没有安装gcc 导致的,安装 gcc之后就不再报错了。 apt-get install gcc

weixin_42623551的博客 9044
上一篇: 华为eNSP WLAN实验:从AP上线到终端连接的完整避坑指南(附配置文件)
下一篇: STM32F407按键LED与晶振电路设计实战
秃然暴富
博客等级 码龄4年 549粉丝 1627原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值