让源码安装不再困难:IvorySQL 一键安装脚本的实现细节解析

国产服务器上编译安装ivorysql开源数据库(简约) aarch架构+KylinV10 sp1系统,源码编译安装ivorysql 阅读详情

作者:王硕,哈尔滨工程大学计算机科学与技术专业本科生。

1. 项目背景与概述

项目背景

在开源社区中,“能否快速上手”往往决定了一个项目能走多远。

对于数据库这类基础软件而言,源码安装虽然灵活、可定制,但复杂的依赖关系、繁琐的编译步骤以及不同操作系统之间的差异,常常成为用户体验的第一道门槛。

在开源之夏 2025 活动中,IvorySQL 社区发布了一个工程实践型项目:为 IvorySQL 提供一套安全、可靠的一键式源码安装脚本。

IvorySQL 是一个基于 PostgreSQL、兼容 Oracle 的开源数据库,支持在多种 Linux 发行版与运行环境中部署。在该项目启动之前,IvorySQL 的源码安装主要依赖用户手动执行多条命令完成,不同发行版之间的依赖差异与环境差异使得安装过程容易出错、难以复现。

为此,本项目的目标是:

  • 提供统一的一键式源码安装入口
  • 自动完成依赖检测、源码编译、初始化与服务启动
  • 兼容 systemd / 非 systemd、Nix、容器等多种运行环境
  • 在保证安全性的前提下降低用户操作复杂度

本项目由开源之夏 2025 中选学生王硕 完成,作为 IvorySQL 社区安装体系的一次工程化补充。

项目概述

本项目提供的 AutoInstall.sh 是 IvorySQL 的自动化安装与部署脚本,采用从源码构建(build from source) 的方式,
自动完成环境检测、依赖安装、源码编译、数据库初始化与服务注册等流程。

该脚本主要面向以下使用场景:

  • 开发者本地快速搭建 IvorySQL 环境
  • CI / 自动化测试中的可重复安装
  • 容器或无 systemd 场景下的最小化部署
  • 运维或测试环境中的标准化安装

在设计上,脚本同时考虑了 Nix 开发环境与传统系统包管理器的差异,并在 systemd 不可用时提供降级的服务管理方案。

AutoInstall.sh 地址:https://github.com/IvorySQL/IvorySQL/tree/IVORY_REL_2_STABLE/autoinstall_script

2. 设计原则与总体架构

2.1 设计原则

  • 阶段化、可观察:脚本将安装过程拆分为互相独立的阶段(权限检查、配置加载、环境准备、依赖安装、编译安装、初始化、启动验证),每一阶段都有明确的入口与失败处理,便于定位与重试。
  • 最小权限原则:运行时服务以独立系统用户/组身份运行;文件与目录所有权与权限通过脚本配置与检查进行控制。
  • 保守解析与防注入:对配置文件的解析采用逐行、安全的方式(避免 eval 或不受限的命令替换),只接受白名单键名,减少配置注入风险。
  • 环境感知与降级兼容:脚本通过环境变量与系统检测判断是否在 Nix shell、容器或具有 systemd 的主机上运行,并据此选择适当的依赖安装与服务管理策略。

2.2 总体架构

脚本以 main() 为流程控制节点,按序调用下列功能模块:权限检查 → 加载配置 → 准备目录与用户 → 初始化日志 → 检测操作系统 → 安装依赖 → 源码编译安装 → 数据库初始化与服务注册 → 启动并就绪检测 → 输出摘要。

每个模块以独立函数实现(例如 check_root、load_config、install_deps、compile_install、init_db_and_service),并由一组统一的日志/错误处理工具函数(STEP、OK、FAIL、trap_err 等)负责格式化输出与统一失败退出行为。

3. 脚本执行流程与阶段化说明

下文以调用顺序逐阶段说明每一步的行为、输入输出与失败模式。

3.1 权限检查(check_root)

  • 目的:确保脚本以 root 权限或具备相应能力运行,因为后续步骤涉及系统包安装、创建系统用户、写入 /etc/systemd/system 等需要特权的操作。
  • 失败行为:若非 root,脚本立即终止并输出失败信息与排查提示。

3.2 加载配置(load_config)

  • 操作:读取同目录下 ivorysql.conf,对每一行执行严格解析:忽略注释与空行,仅允许 KEY=VALUE 形式。脚本对键名做白名单匹配,例如 INSTALL_DIR、DATA_DIR、SERVICE_USER、SERVICE_GROUP、LOG_DIR;未知键产生警告但不注入。
  • 合理性:此做法避免非法或恶意配置中的命令注入。若缺少必需键,脚本会以失败状态退出,要求用户修正配置文件。

3.3 目录与用户准备(prepare_fs_and_users)

  • 操作:校验 INSTALL_DIR、DATA_DIR、LOG_DIR 必须为绝对路径且不是文件;若目录不存在则创建;通过 getent 检查组/用户是否存在,必要时创建系统用户(useradd -r)。随后设置目录权限与归属(对日志目录、数据目录等设置合适的权限和所有权)。脚本尽量保持幂等性,可多次运行而不破坏有效配置。

3.4 日志初始化(init_logging)

  • 操作:创建日志目录(如不存在),并将脚本的 stdout/stderr 重定向到 timestamp 命名的安装日志与错误日志(例如 install_<timestamp>.log、error_<timestamp>.log),以便全程记录与后续审计。关键子命令(如 configure、make、initdb)会将日志单独写入专用文件,便于定位。

3.5 操作系统检测(detect_os)

  • 操作:读取 /etc/os-release,识别 ID 与 VERSION_ID,映射出 OS_ID、OS_VER 与包管理器(dnf|yum|apt-get)。脚本对支持的发行版与主版本做校验:例如 RHEL/Alma/Rocky/Oracle 主版本 8/9/10;Ubuntu 20/22/24;Debian 12/13。若不在支持列表内则退出。

3.6 依赖安装(install_deps)

  • 两种模式:
    • Nix 环境检测到时(IN_NIX_SHELL 或 NIX_BUILD_TOP 存在):跳过系统包安装,转为在 /usr/include 与 /nix/store 中探测必要头文件与库;验证 Perl 模块;既假定 Nix 提供所需依赖。
    • 非 Nix 情况:基于 PKG(dnf|yum 或 apt-get)执行软件包安装:脚本内列出 EL 系列与 APT 系列的依赖包数组(诸如 gcc、make、readline-devel/libreadline-dev、openssl-devel/libssl-dev、libxml2-dev 等),并在 EL 系统上尝试启用 EPEL/CRB/PowerTools。安装后再次探测头文件与 Perl 模块,必要时尝试用 cpanm 安装特定模块(如 IPC::Run)。

3.7 源码编译与安装(compile_install)

  • 前置条件:脚本默认源码位于脚本所在目录的上层(即 ..)。它要求存在 configure 脚本与 src 目录。
  • 配置参数构造:检测系统是否存在 OpenSSL、ICU、libuuid、libxml 相关头文件,依据检测结果在 ./configure 参数中追加 --with-openssl、--with-icu 等或相应的 --without-... 标记,并对 Debian/Ubuntu 系统添加必要的编译安全标志(如 -fPIE)。这一自动化判断能够平衡可用功能与系统实际依赖。
  • 构建流程:执行 ./configure → make clean → make -j$JOBS → make install。若 configure 失败,脚本会输出 config.log 的尾部以便定位错误;若 make 或 make install 失败,脚本同样提供尾部日志并退出。安装完成后会将 INSTALL_DIR 的所有权切换为服务用户,但会对危险路径(如 /、/usr、/etc 等)进行拒绝,避免错误 chown。

3.8 数据库初始化与服务注册(init_db_and_service)

  • 数据目录准备:为 DATA_DIR 设置合适权限(如 750)并确保其所有权为服务用户。若目录非空且需要重新初始化,脚本以服务用户身份清理目录(谨慎操作)。
  • initdb 执行:构造 initdb 命令(导出适当的 PATH 与 LD_LIBRARY_PATH),传入 --locale=C --encoding=UTF8 等安全默认参数,以及由环境控制的 INIT_MODE、CASE_MODE。以 runuser 或 su 切换成服务用户运行 initdb,并把 initdb 日志写入专用文件。
  • 服务管理:若检测到 systemd(检查 systemctl 与 /run/systemd/system),脚本将写入 systemd unit 文件(/etc/systemd/system/ivorysql.service),执行 systemctl daemon-reload、systemctl enable ivorysql 并使用 systemd 管理启动与停止。若无 systemd(常见于容器),脚本会生成 $INSTALL_DIR/ivorysql-ctl 辅助脚本,封装 pg_ctl start/stop/reload/status 并写入日志,从而提供基本的服务控制接口。

3.9 启动与就绪检测(start_and_verify)

  • 启动操作:通过 systemctl start ivorysql 或 pg_ctl(经由 ivorysql-ctl)启动数据库进程。
  • 就绪检测:使用 pg_isready 或读取 postmaster.pid 中的端口信息轮询检测,等待时间受 READY_TIMEOUT 环境变量控制(默认值脚本内定义,常见为 90 秒)。若超时或失败,则在 systemd 环境下提供 systemctl status 输出,或输出 server 日志尾部以便排查。最后以 psql 执行简单查询(例如 SELECT 1)验证基础连接能力。

3.10 安装摘要(summary)

  • 输出:打印安装耗时、二进制与数据目录位置、日志路径、当前服务状态(systemd 下用 systemctl is-active),并提示常用运维命令(如 journalctl -u ivorysql、$INSTALL_DIR/ivorysql-ctl status)。此步骤有助于运维人员在安装完成后立即获取重点信息。

4. 核心模块实现细节(关键函数解析)

以下按照脚本中实际函数名与实现意图进行展示,指出实现逻辑与工程考虑。

4.1 load_config —— 安全的配置解析器

  • 实现要点:逐行读取配置文件,使用 IFS='=' read -r key value 等方式拆分;对 key 和 value 执行前后空白裁剪;跳过注释行(以 # 开头)及空行;仅接受白名单键(INSTALL_DIR、DATA_DIR、SERVICE_USER、SERVICE_GROUP、LOG_DIR),对未知键发出 WARN 而非盲目加载。
  • 安全意义:拒绝 eval 或直接将整行导入环境,避免用户在配置文件中植入代码。若缺少必需项,则 FAIL 并提示修改配置文件。

4.2 detect_os —— 稳健的发行版识别与包管理器映射

  • 实现要点:利用 /etc/os-release 中的 ID 与 VERSION_ID 字段判断发行版类型,并设置 PKG(dnf|yum|apt-get);对 RHEL 家族识别 EL_MAJOR 并检查支持的主版本;对 Ubuntu、Debian 进行类似校验。
  • 工程意义:提前拒绝不受支持的系统,防止在未知环境上盲目执行包安装造成不可控后果。

4.3 install_deps —— 两栈策略(Nix / 系统包)

  • Nix 情况:若检测到 IN_NIX_SHELL 或 NIX_BUILD_TOP,脚本避免使用系统包管理器,转而探测 /nix/store 等位置的头文件并验证 Perl 模块。该策略假定 flake.nix 已在 Nix Shell 中准备好依赖。
  • 传统包管理器情况:在 EL 系列或 Debian/Ubuntu 上分配不同的包数组(如 EL_PKGS、APT_PKGS),并使用对应的包管理器安装。对于 EL 系统,还会尝试启用额外仓库(EPEL/CRB/PowerTools)。安装完成后再次探测关键头文件,并确保 IPC::Run 等测试支持模块存在(若需要运行测试)。

4.4 compile_install —— 自动检测特性并调用构建链

  • 检测逻辑:通过 pkg-config 或直接检查 /usr/include 下的头文件来判断是否存在 OpenSSL、ICU、libuuid、libxml 等库;根据结果拼接 ./configure 的 OPTS 参数(--with-openssl 或 --without-openssl 等),同时设置合适的 CFLAGS/LDFLAGS(例如在 Debian 系统上加入 -fPIE)。
  • 构建与安全:运行 ./configure 并在失败时输出 config.log 的尾部;并行 make 使用 nproc 限定线程数;make install 后仅对 INSTALL_DIR 做受控 chown,并拒绝对系统关键路径做所有权变更。

4.5 init_db_and_service 与 ivorysql-ctl 模板

  • initdb 调用:在服务用户权限下执行 initdb -D "$DATA_DIR" --locale=C --encoding=UTF8 -m "$INIT_MODE" -C "$CASE_MODE",并将输出定向到初始化日志。
  • systemd 单元:如果存在 systemd,则写入 unit 文件、daemon-reload 并启用服务。unit 文件中包含 User=、Group= 与 ExecStart= 等字段以保证已配置的服务用户运行。
  • 非 systemd:生成 $INSTALL_DIR/ivorysql-ctl,该脚本实现 start|stop|reload|status,内部使用 pg_ctl。模板中包含占位符(如 __PGDATA__、__INSTALL__),脚本创建时替换为实际路径并设置可执行。

5. 配置系统(ivorysql.conf)与变量优先级

5.1 ivorysql.conf 的结构

配置文件为简单的 KEY=VALUE 格式,示例键值包括(但不限于):


INSTALL_DIR=/usr/ivorysql DATA_DIR=/var/lib/ivorysql/data SERVICE_USER=ivorysql SERVICE_GROUP=ivorysql LOG_DIR=/var/log/ivorysql

脚本严格解析该文件,仅接受预定义键,任何非白名单键会被警告但不会直接注入脚本环境。

5.2 环境变量的作用与优先级说明

脚本允许通过若干环境变量调整运行行为,例如:

  • INIT_MODE、CASE_MODE:传递给 initdb 的模式参数(脚本中设有默认值)。
  • READY_TIMEOUT:就绪检测的超时时间(单位秒)
  • RUN_TESTS:若设为 1,脚本会尝试确保测试所需的 Perl 模块并可能执行部分测试。
  • 环境变量用于控制运行时行为,但脚本并未实现通用的“环境变量覆盖配置文件路径值”的优先级规则;通常主目录路径(INSTALL_DIR、DATA_DIR 等)以 ivorysql.conf 为准。若需要覆盖,建议在后续脚本扩展中实现受控的覆盖机制(详见第 10 节建议)。

5.3 命令行参数

脚本支持最小命令行参数,例如 -h|--help、-v|--version。默认行为(无参数)为执行完整安装流程。用户如需非交互或 CI 友好的行为,可参考建议在脚本中添加 --non-interactive 标志。

6. 多环境兼容策略(Nix、容器、systemd/非 systemd)

6.1 Nix 开发环境

  • 检测方式:通过检测 IN_NIX_SHELL 或 NIX_BUILD_TOP 环境变量判断是否运行在 Nix shell 中。
  • 行为差异:若在 Nix 环境,脚本跳过系统包安装,以避免与 Nix 对系统状态的独立管理冲突;改为在 Nix 提供的路径(如 /nix/store)以及 /usr/include 中查找所需头文件与库。该方式要求 flake.nix 在外部(由用户或 CI)将依赖注入到 Nix shell。请注意:本说明未读取 flake.nix 的内部内容,因此无法断言 Nix 环境下确切的包集合与版本。

6.2 容器(Docker)场景

  • 容器适配:容器中常不存在 systemd。脚本通过 has_systemd() 的检测来判断:若无 systemd,则生成 ivorysql-ctl 辅助脚本,并使用 pg_ctl 管理进程生命周期。此方式确保容器镜像能够通过普通的守护进程或前台进程运行数据库。README 中也建议在容器上下文中以 nix develop 或在镜像内预装依赖来简化构建步骤。

6.3 systemd 与非 systemd 的差异化管理

  • systemd:支持完整的 unit 文件,能够利用 systemctl start/stop/enable、journalctl 等机制实现守护进程管理与日志集中化。unit 文件可配置 User/Group、资源限制等。
  • 非 systemd:使用 ivorysql-ctl 与 pg_ctl 实现基本管理命令,日志写入到指定目录。这种方式适用于简单容器或无 systemd 的嵌入式场景,但缺乏 systemd 提供的高级功能(如自动重启策略、依赖管理、cgroup 支持)。

7. 安全、权限与运行时隔离策略

7.1 用户与权限

  • 服务用户:脚本在 ivorysql.conf 中定义 SERVICE_USER 与 SERVICE_GROUP,并尽量创建系统用户(-r 标志),以便数据库服务在运行时不以 root 身份运行,遵循最小权限原则。安装后将二进制、数据与日志的所有权分配给该用户。

7.2 文件系统保护与危险路径检查

  • 危险路径拒绝:在对 INSTALL_DIR 执行 chown 等敏感操作前,脚本会检测并拒绝诸如 /、/usr、/etc 等系统关键路径,防止误操作引发不可逆影响。
  • 数据目录权限:DATA_DIR 一般设为 750 或类似权限,以限制对数据库文件的非授权访问。

7.3 编译与运行时安全配置

  • TLS/加密支持:脚本检测 OpenSSL 开发头文件以决定是否将 --with-openssl 传递给 ./configure,从而启用 TLS 支持;若缺失则脚本会明确警告并以 --without-openssl 继续构建,提示用户补装依赖以获得加密支持。
  • locale 与编码:initdb 使用 --locale=C --encoding=UTF8 作为安全与可预测的默认值。

8. 日志体系、故障排查与诊断方法

8.1 日志位置与分级

脚本产生并维护多条日志线:

  • 全局安装日志:$LOG_DIR/install_<timestamp>.log、$LOG_DIR/error_<timestamp>.log(通过 init_logging 捕获脚本所有输出)。
  • 子命令日志:如 initdb 日志 initdb_<timestamp>.log、服务器启动日志 server_<timestamp>.log。
  • 非 systemd 控制脚本日志:$LOG_DIR/server_ctl.log。
  • systemd 日志:若使用 systemd,可通过 journalctl -u ivorysql 查看。

8.2 全局错误捕捉与提示

  • 脚本设置了 trap 'trap_err "${LINENO}" "${BASH_COMMAND}"' ERR,一旦命令失败即打印行号与失败命令,并调用 hint() 输出一系列排查指引(包括查看 systemctl status、tail 日志、检查目录权限、使用 pg_isready 检查连通性等),以便快速定位问题。

8.3 推荐的排查流程(实践)

遇到安装或启动失败时,建议依次执行:

  1. 检查服务状态(systemd:systemctl status ivorysql;非 systemd:$INSTALL_DIR/ivorysql-ctl status)。
  2. 查看最近日志(tail -n 200 $LOG_DIR/*.log 或 journalctl -u ivorysql --no-pager | tail -n 200)。
  3. 确认 postmaster.pid 与端口(cat $DATA_DIR/postmaster.pid)是否可用并且端口未被占用。
  4. 检查数据目录权限(ls -ld $DATA_DIR 与 ls -l $DATA_DIR)。
  5. 若编译失败,查看 config.log 以及 make 的完整输出。

9. 性能优化建议与工程化实践

9.1 构建阶段优化

  • 并行构建控制:脚本使用 nproc 设置 make -j$JOBS,但在内存受限环境下建议人工限制并行度(例如 make -j$(nproc --ignore=1))。
  • 使用 ccache:在开发与 CI 中集成 ccache 可显著减少二次构建时间,建议在构建环境中提供 ccache 并在 PATH 中优先使用。
  • 构建缓存:在 CI 中缓存 src 的构建产物或中间对象,以避免每次全量编译。

9.2 运行时准备与监控

  • 就绪超时调整:根据机器性能调整 READY_TIMEOUT,对慢磁盘或低配机器适当增加等待时间。
  • 健康检查集成:在编排层(Kubernetes、系统监控)中使用 pg_isready 或更复杂的 SQL 健康检测(例如检查数据库是否能写入并读取)作为探针。
  • 监控导出:将数据库的运行指标(连接数、缓存命中率、事务速率)通过 Prometheus 等导出器收集,以便长期分析与容量规划。

10. 可扩展性与社区集成建议

10.1 支持更多发行版

要增加对新发行版的支持,应在 detect_os() 中扩展 /etc/os-release 的解析逻辑并在 install_deps() 中添加对应包管理器与系统包列表。遵循脚本的白名单与探测逻辑,新增后务必在 CI 中验证头文件路径与包名差异。

10.2 安全且可控的自定义编译选项

建议引入配置项 EXTRA_CONFIGURE_FLAGS 或单独的 build.conf,但必须对其值进行严格白名单或正则校验以避免命令注入。例如仅允许 --enable-foo、--with-bar=/path 等已知安全选项。避免直接将任意字符串追加到 ./configure。

10.3 CI 与 Nix 集成建议

  • CI:提供样例 ivorysql.conf 并把日志文件作为 CI 工件上传。建议在 CI 中对不同平台(Ubuntu/Debian/EL)分别跑矩阵构建以验证兼容性。
  • Nix:若项目以 Nix flake 作为首选依赖管理,请把 flake.nix 与 flake.lock 保持在仓库内并在 README 中给出 nix develop 的用法示例;同时在脚本中加入对 flake.nix 存在性的友好提醒。

附录 A:代表性代码片段与使用示例

A.1 ivorysql.conf 示例


INSTALL_DIR=/usr/ivorysql DATA_DIR=/var/lib/ivorysql/data SERVICE_USER=ivorysql SERVICE_GROUP=ivorysql LOG_DIR=/var/log/ivorysql

(脚本中 load_config 将严格解析上述键并加载为全局变量。)

A.2 部分脚本片段(示例:安全解析)


# load_config: 安全解析示例(摘自 AutoInstall.sh) while IFS='=' read -r key value || [ -n "$key" ]; do key="$(echo "$key" | sed 's/^[[:space:]]*//;s/[[:space:]]*$//')" value="$(echo "$value" | sed 's/^[[:space:]]*//;s/[[:space:]]*$//')" [[ -z "$key" || "$key" =~ ^# ]] && continue case "$key" in INSTALL_DIR|DATA_DIR|SERVICE_USER|SERVICE_GROUP|LOG_DIR) declare -g "$key=$value" ;; *) WARN "Unknown config key: $key" ;; esac done < "$cfg"

此片段展示了脚本对配置进行裁剪、注释跳过与白名单匹配的方式。

A.3 常用安装命令(快速)


# 以 root 运行安装脚本(默认) sudo bash AutoInstall.sh # 在 Nix 开发环境中运行 nix develop bash AutoInstall.sh

(使用 Nix 时请确保 flake 环境已正确配置,脚本会检测 IN_NIX_SHELL 并跳过系统包管理器步骤。)

附录 B:常见问题汇总与快速处置命令

  1. 编译失败,提示找不到某头文件:确认已安装相应的 -dev 或 -devel 包(根据发行版名选择),或在 Nix 环境中加入对应的包。查看 config.log 获取详细错误。
    • 快速命令:tail -n 200 $LOG_DIR/config.log、dpkg -l | grep <pkg>(Debian/Ubuntu)或 rpm -qa | grep <pkg>(EL)。
  2. 启动超时或 pg_isready 不就绪:查看 server 日志与 postmaster.pid,确认端口是否被占用或数据目录权限是否正确。
    • 快速命令:tail -n 200 $LOG_DIR/server_*.log、cat $DATA_DIR/postmaster.pid、ss -lntp | grep <port>。
  3. systemd 未启用但希望使用 systemd 单元:确保系统具有 systemd(which systemctl)并以 root 权限运行脚本以便写入 /etc/systemd/system。若在容器中运行,考虑使用带 systemd 的基础镜像或改用 ivorysql-ctl。

结语

AutoInstall.sh 并非简单地将安装命令串联在一起,而是一次面向真实用户场景的工程化实践。

通过阶段化设计、严格的配置解析、安全的权限控制以及对多运行环境的适配,该脚本在降低 IvorySQL 源码安装门槛的同时,也为社区提供了一套可维护、可扩展、可复用的安装基础设施。

希望本文的技术说明能够帮助更多用户理解 IvorySQL 的安装体系,也欢迎社区成员在此基础上持续改进与共建。

IvorySQL 4.6:DocumentDB+FerretDB 实现 MongoDB 兼容部署指南 通过本文的步骤,我们成功在 CentOS Stream 9 环境下搭建了含 DocumentDB 插件的 IvorySQL 环境,并结合 FerretDB 实现了对 MongoDB 的平替。该方案不仅解决了 MongoDB 因 SSPL 许可证带来的适配难题,还借助 IvorySQL 本身兼容 Oracle 的特性,为企业提供了更灵活、多元的数据库选择。对于开源项目或早期商业项目而言,此方案无需担心复杂的许可机制,同时能通过熟悉的 SQL 操作与 MongoDB 客户端交互,降低了技术迁移成本。 阅读详情

相关推荐

史上最全的Logisim存储系统实验教程(基于华中科技大学计算机组成原理实验)内赋源码下载

本博客是最全的最好的解释的华中科技大学计算机组成实验存储系统实验,本博客给出了电路实现,也给出了使用电路的原因有利于新手学习十分详细。并且内赋源码下载。

qq_62325622的博客 2万+

Linux环境源码编译安装IvorySQL

目录 Linux环境源码编译安装 一、准备工作 1.1 获取 IvorySQL源码 1.2 安装依赖包 二、编译安装 2.1 配置 2.2 编译安装 三、初始化数据库服务 3.1 创建操作系统用户 3.2 创建数据目录 3.3 环境变量 3.4 设置防火墙 3.5 初始化 3.6 启动数据库 四、配置服务 4.1 客户端验证 4.2 基本参数 4.3 守护服务 五、客户端连接数据库 5.1 psql连接 5.2 DBeaver连接 5.3 瀚高 develo...

IvorySQL的博客 665

滚动时域优化方法

滚动时域优化(Receding Horizon Optimization, RHO),也被广泛称为模型预测控制(Model Predictive Control, MPC),是一种用于动态系统优化和控制的。其核心思想是“在每个当前时刻k,控制器只考虑未来一个(称为“预测时域”或“优化时域”,长度N)内的系统行为。(通过测量或估计得到)。(描述状态如何随输入和干扰变化)。(如果有,可能基于历史数据或假设)。在这个有限的未来时域[k, k+N-1]上,求解一个。这个优化问题的目标是找到一个。

m0_69522810的博客 2289

IvorySQL系列:初始IvorySQL 3.0 在CentOS 7.9下源码安装及不同兼容模式验证测试

IvorySQL项目最初由瀚高公司发起,基于流行的PostgreSQL分支,发展成了一个遵循Apache 2.0开源协议的项目。截至到2024年1月,最新版本为IvorySQL Release 3.0 beta版。与PostgreSQL完全兼容,并且还集成了一些独特特性,这种融合让其在保持兼容性的同时增加了更多的功能。IvorySQL社区对于与PostgreSQL的兼容性非常重视,并且承诺可以直接替代最新版本的PostgreSQL。

shlei5580的专栏 1625

产品包装质检实战:基于YOLOv5的智能包装合格检测系统全流程指南

摘要: 针对产品包装质检效率低、漏检率高的问题,本文提出基于YOLOv5的智能检测系统。系统通过采集包装缺陷数据(破损、缺标、封装不良等),利用YOLOv5实现多类别缺陷识别(准确率≥95%),并开发Flask Web界面实现检测可视化与报告生成。实验表明,该系统在30帧/秒的产线速度下可稳定运行,显著提升质检效率。项目涵盖数据标注、模型训练、系统开发全流程,具有工业落地价值,适用于智能制造场景的自动化质检需求。(149字)

LXY_LOVE36的博客 92

飞腾2000+kylinV10源码部署安装IvorySQL数据库V1.5

飞腾2000+KylinV10服务器上部署安装ivorysql数据库,并简单测试

Angelo_zhangw的博客 1042

OpenStack ussuri 私有云平台搭建企业级实战

openstack是一个云操作系统,这个操作系统控制着数据中心中的计算,存储和网络资源。所有这些资源的管理都是通过API来来实现的,并且管理资源都有相应的认证机制。在openstack中有一个叫做dashboard的仪表盘,这个仪表盘通过web界面可以管理这些在DC中的资源。除了能提供IaaS功能外,你还可以使用orchestration,错误管理和服务管理等服务来确保应用的高可用性。

悦分享 2337

Hi 同学,快来开源之夏认领你的 IvorySQL 开源任务!

开源之夏是由中国科学院软件研究所 “开源软件供应链点亮计划” 发起并长期支持的一项暑期开源活动,旨在鼓励在校学生积极参与开源开发维护,培养和发掘优秀开发者,推动开源社区发展与软件供应链建设。该活动联合国内外开源社区发布项目任务,面向全球高校学生开放报名。通过项目审核的学生可以在导师的指导下,利用暑期参与开源项目建设,提高个人技术能力、了解开源、结识开源前辈,完成项目的同学还将获得现金奖励与荣誉证书!如果你不知道怎么参与,可以参考官方教程《预热准备|开源之夏 2025 项目任务陆续上线,提前准备不慌张》

IvorySQL的博客 1032

华为OD机试双机位A卷 - VLAN资源池 (C++ & Python & JAVA & JS & GO)

华为OD机试2025双机位A卷 VLAN资源池,提供Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解

qq_45776114的博客 878

请举手回答,LDO和DC-DC有什么不同?

文章目录1 LDO是什么2 LDO典型电路3 DC-DC是什么4 DC-DC典型电路5 LDO和DC-DC区别10.2.6 小结一下 大家好,我是记得诚。 DC-DC和LDO都是电源芯片,两者差异很大,用法也不同,这篇博客讲述LDO和DC-DC的一些差异,帮助更好的认识LDO和DC-DC并进行选型。 1 LDO是什么 LDO是low dropout regulator的简称,即低压差线性稳压器,这是相对于传统的线性稳压器来说的,传统的稳压器,输入比输出要高出很多,否则无法工作,LDO可能输入比输出高1~2V

记得诚 1万+

IvorySQL 教程:安装与使用指南

IvorySQL 的源代码目录结构大致如下: ``` . ├── docs # 文档资料 ├── src # 源代码主目录 │ ├── include # 头文件 │ └── lib # 库代码 ├── scripts # 脚本文件,包括构建和测试脚本 ├── tests # 测试用例 └── etc # 配...

gitblog_00550的博客 664

使用Python爬虫抓取政府网站政务信息:公告、通知的自动化抓取与分析

通过结合Requests、BeautifulSoup、Selenium等技术,你能够高效地抓取政府网站的数据,并通过MySQL存储与Pandas分析这些数据。通过自动化手段抓取这些信息,不仅可以提高数据收集的效率,还能够实时获取最新的政务动态,为政策研究、舆情分析等提供宝贵数据。我们将通过Python的Requests、BeautifulSoup、Selenium等工具,结合最新的技术实现一个完整的爬虫系统,帮助你轻松抓取并分析政务信息。通过爬虫,我们可以自动化地从指定网站上抓取公告、新闻、通知等信息。

2201_76125261的博客 1907

恭贺开源之夏 2025 IvorySQL 项目中选学生

今年 IvorySQL 社区在开源之夏共发布了 2 个项目,全部围绕 IvorySQL 本身的开发。

IvorySQL的博客 568

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

利用 Pgpool-II 实现 IvorySQL 集群读写分离

由此证明,Pgpool-II不但可以兼容IvorySQL的PG端口,也可以完美适配IvorySQL兼容的Oracle端口,并实现读写分离架构,这也为想要快速搭建读写分离架构的Oracle用户,提供了一种可行的方案。读写分离是数据库架构中的一种常见策略,它通过将读操作和写操作分开处理来优化数据库的负载,可以显著提高数据库系统的性能和可伸缩性。IvorySQL 作为一款基于 PostgreSQL 研发的兼容 Oracle 的数据库,同样完美适配Pgpool-II,

IvorySQL的博客 1218

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

从 PostgreSQL 升级至 IvorySQL 4.0

本文介绍了从 PostgreSQL 12.22 升级到 IvorySQL 4.0 的主要步骤,包括在 Rocky Linux 9 上安装 IvorySQL 4.0,以及将 PostgreSQL 12.22 中的数据迁移到 IvorySQL 4.0 的过程,通过备份和恢复的方式,可以顺利完成数据库的升级和迁移工作。在实际生产环境中,升级和迁移数据库是一个非常复杂的过程,需要考虑的因素较多。

IvorySQL的博客 1045

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Linux 安装 IvorySQL

IvorySQL的各种安装方法,以及RPM安装的一个启动小问题的修改。

丘处机的专栏 1782

ivorysql 源码分析-双port兼容

ivorysql采用双端口的方式实现oracle兼容,默认的5432端口为pg语法,1532用来支持oracle的语法与功能,从官方的流程图上看是支持oracle应用连接的,但是貌似没有支持oracle的协议,以下为支持oracle兼容模式的提交的commit。生成不同语法解析函数:%name-prefix=“base_yy” 代表生成的函数和变量名从yy改成base_yy,同flex,为了在一个产品里使用多个语法分析器,分析不同的数据类。​ 原文件基本复制的plpgsql,做了部分文件名等修改。

weixin_41685257的博客 959

IvorySQL 4.2 发布

IvorySQL 4.2 已于 2025 年 1 月 13 日正式发布。新版本全面支持 PostgreSQL 17.2,并修复了多项 bug。

IvorySQL的博客 564

IvorySQL-WASM:免安装的数据库探索之旅

为了降低社区用户的使用门槛,提升使用体验,IvorySQL 社区特别推出了 IvorySQL-WASM 项目,帮助用户快速在线 Demo。IvorySQL-WASM 基于开源的 Postgres-WASM 框架开发。它允许用户直接在网页浏览器中体验 IvorySQL,无需本地安装或复杂部署。通过结合 WebAssembly 和虚拟化技术,IvorySQL-WASM 提供了一种简单、轻量且易于访问的方式,让开发者、测试人员和数据库爱好者能够轻松探索 IvorySQL 的强大功能。

IvorySQL的博客 864

版本发布| IvorySQL 4.6 发布

2025 年 9 月 10 日,IvorySQL 4.6 正式发布!新版本全面支持 PostgreSQL 17.6,新增多项新功能,并修复了已知问题。

IvorySQL的博客 1065

开源之夏 2025 结项名单揭晓!IvorySQL 社区双项目圆满收官

今年 IvorySQL 社区在开源之夏共发布了 2 个项目,全部围绕 IvorySQL 本身的开发。开源之夏是高校学生接触开源、参与开源的有效途径,IvorySQL 社区十分荣幸参与其中,并辅助两位高校学生顺利结项。后续 IvorySQL 将会邀请两位高校学生参与 IvorySQL 社区,也会继续参与开源之夏等开源活动。

IvorySQL的博客 775

WAL-G完美支持IvorySQL的备份恢复

WAL-G是一款基于Go语言精心打造的备份恢复工具,以其简洁的操作流程、卓越的性能表现以及安全高效而著称。它主要为PostgreSQL、MySQL/MariaDB以及MS SQL Server等数据库系统提供全量备份与增量备份的恢复解决方案。此外,在其Beta版本中,WAL-G还进一步扩展了支持范围,增添了对MongoDB和Redis等数据库的支持,从而满足了更多用户对于数据库备份恢复的需求。

IvorySQL的博客 1304

版本发布| IvorySQL 5.1 发布

2025 年 12 月 18 日,IvorySQL 5.1 正式发布!IvorySQL 5.1 基于 PostgreSQL 18.1 构建,包含多项缺陷修复与功能改进。完整更新列表可参考官方文档站点。

IvorySQL的博客 883

IvorySQL 4.4 发布

IvorySQL 4.4 已于 2025 年 3 月 10 日正式发布。新版本全面支持 PostgreSQL 17.4,新增多项新功能,并修复了已知问题。

IvorySQL的博客 1056
上一篇: IvorySQL年度报告|和开发者一起成长的 2025
下一篇: PostgreSQL 的 SQL 查询之旅
IvorySQL
博客等级 码龄5年 744粉丝 555原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值