当前位置: 首页 > news >正文

无需安装!PostgreSQL 18 Windows 便携部署方案

在 Windows 环境中使用 PostgreSQL 的常见做法是下载安装程序并进行配置。该方式操作简便,可自动完成依赖组件和系统服务的部署。然而,对于无需 PostgreSQL 持续运行、需要在多个版本之间灵活切换,或希望具备可复制至任意计算机并直接运行的便携式环境的场景,本文将介绍一种更灵活的实现方案。

该方案仅适用于个人开发环境。在未进行安全加固的情况下,不应将其用于共享或生产部署等场景。

下载软件包

首先需要获取 PostgreSQL 安装包。官方下载主页会跳转至适用于 Windows 的下载页面,默认推荐使用 EDB 提供的安装程序。

由于本文所介绍的方法不依赖安装程序,应前往提供 ZIP 压缩包的页面下载相应文件。

图片1.png

选择所需的 PostgreSQL 数据库版本,此示例以 18.0 版为例。将压缩包下载并保存至本地,例如默认的下载目录,文件大小约为 325MB。

准备安装目录

创建一个用于解压和存放二进制文件的目录。本文示例在 d:\stack 下创建 stack 文件夹,用于集中存放不同测试环境组件。为节省磁盘空间,可将该文件夹设置为压缩存储,相关方法可参考“开始前的准备”部分说明。

目录结构示例如下:

  • 主目录:d:\stack
  • PostgreSQL 18 目录:d:\stack\pg-18(建议避免目录名中出现空格)

解压文件

将下载的压缩包解压至 pg-18 目录中。解压后通常会生成一个名为 pgsql 的子文件夹,其中包含 bin、doc、include 等文件夹。为简化目录结构,可将这些文件夹上移至 d:\stack\pg-18 下,并删除空的 pgsql 文件夹。

完成解压后,还需进行必要的环境变量配置,以确保 PostgreSQL 能正常启动。

背景说明 — 所需环境变量

在启动 PostgreSQL 前,需要配置以下环境变量,以确保可执行文件能够正常运行:

  • PATH : Windows 系统的路径变量,需要将所使用的 PostgreSQL 版本放在最前面。
  • PGDIR : PostgreSQL 安装的基础目录,本例中为 d:\stack\pg-18
  • PGDATA : 存放数据的目录(即数据库实际存储位置)。可指向安装目录内的文件夹,也可指定到其他路径。为简化操作,本例将其设置为 PGDIR 下的 data 目录。
  • PGLOCALEDIR : 本地化文件所在目录,本例中为 PGDIR\share\locale
  • PGPORT : 数据库服务器运行端口,默认值为 5432,若端口被占用,可选择 5412、5416、5418 等。
  • PGDATABASE : 默认数据库名称,通常设置为 postgres。
  • PGUSER : 管理员账户名称,通常设置为 postgres。
  • PGLOGS : 日志文件存放路径。

配置完成后,可使用 pg_ctl 工具启动或停止 PostgreSQL 服务。

在启动或停止服务器之前,需先通过 pg_ctlinitdb 子命令创建新的数据库集群,并添加以下参数:

  • -A trust:设置 PostgreSQL 信任所有本地连接(详见下文)。
  • -U postgres:将本地超级用户设置为 postgres。
  • -E UTF8:指定服务器编码为 UTF-8,以保证兼容性。

说明:trust 模式仅适用于本地测试环境,不适合生产场景。如需修改认证方式,可编辑 pg_hba.conf 文件进行调整。

脚本文件说明

需创建四个命令脚本,用于管理 PostgreSQL 环境:

  • pg-18-vars.cmd:用于设置环境变量,确保命令行下的其他工具能够正确识别 PostgreSQL 的相关路径和配置。其他脚本在执行前均会调用此脚本以设置变量。
  • pg-18-start.cmd:用于启动 PostgreSQL 服务器。
  • pg-18-stop.cmd:用于停止 PostgreSQL 服务器。
  • pg-18-initialize.cmd:用于初始化数据库集群。

各命令脚本的设置方式如下:

@ECHO ON:: Save the directory where we are
pushd %CD%:: Shift directories to the correct path
%~d0
cd %~dp0:: Set the variable using the common file
call pg18-vars.cmd:: The actual command that needs to do something
"%PGDIR%\bin\pg_ctl" <---- the actual parameters: start, stop, initdb ----->:: Restore the directory where we started from
popd

为了实现从任意路径执行脚本,命令脚本按照以下步骤进行处理:

  1. 保存当前执行目录(可参考 pushd / popd 的用法)。
  2. 切换至脚本所在目录。
  3. 使用 call 调用 pg-18-vars.cmd,以确保执行完毕后控制权返回当前脚本。
  4. 执行脚本所需的 pg_ctl 命令。
  5. 返回到最初执行脚本的目录。

这些命令脚本将放置在 stack 的根目录,即 D:\Stack,此时通用配置如下:

@SET PATH=%~dp0pg-18\bin;%PATH%
@SET PGDIR=%~dp0\pg-18
@SET PGDATA=%PGDIR%\data
@SET PGLOCALEDIR=%PGDIR%\share\locale
@SET PGPORT=5418
@SET PGDATABASE=postgres
@SET PGUSER=postgres
@SET PGLOGS=%~dp0\logs\pg-18\logfile

日志说明:通常建议将日志统一存放在 d:\stack 下的公共目录,而非各个安装目录中(在日常使用和维护时更便于管理)。因此,本例中日志路径设置为 d:\stack\logs\pg-18,而非 d:\stack\pg-18\logs。可根据实际需求调整日志存放位置。

不同的 pg_ctl 命令行需根据用途进行设置:

  • 初始化:需添加前文讨论的额外参数。
"%PGDIR%\bin\initdb" -U postgres -A trust -E UTF8
  • 启动:指定数据库位置和日志文件路径,并执行启动操作。
"%PGDIR%\bin\pg_ctl" -D "%PGDATA%" -l "%PGLOGS%" start
  • 停止:指定数据库位置和日志文件路径,并执行停止操作。
"%PGDIR%\bin\pg_ctl" -D "%PGDATA%" -l "%PGLOGS%" stop

执行脚本

准备完四个命令脚本后,即可执行。

初始化

首先,执行初始化命令。

$ pg18-initialize.cmd$ pushd D:\stack$ D:$ cd D:\stack\$ call pg18-vars.cmd$ ECHO Preparing for PostgreSQL 18
Preparing for PostgreSQL 18$ "D:\stack\pg-18\bin\initdb" -U postgres -A trust -E UTF8
The files belonging to this database system will be owned by user "Mohit".
This user must also own the server process.The database cluster will be initialized with locale "English_Singapore.1252".
The default text search configuration will be set to "english".Data page checksums are enabled.creating directory D:/stack/pg-18/data ... ok
creating subdirectories ... ok
selecting dynamic shared memory implementation ... windows
selecting default "max_connections" ... 100
selecting default "shared_buffers" ... 128MB
selecting default time zone ... Asia/Kuala_Lumpur
creating configuration files ... ok
running bootstrap script ... ok
performing post-bootstrap initialization ... ok
syncing data to disk ... okSuccess. You can now start the database server using:^"D^:^\stack^\pg^-18^\bin^\pg^_ctl^" -D ^"D^:^\stack^\pg^-18^\data^" -l logfile start

所有操作结果符合预期。此时在同一命令窗口执行 set pg,即可看到 PostgreSQL 18 的环境变量已正确设置。

$ set pg
PGDATA=D:\stack\pg-18\data
PGDATABASE=postgres
PGDIR=D:\stack\pg-18
PGLOCALEDIR=D:\stack\pg-18\share\locale
PGLOGS=D:\stack\logs\pg-18\logfile
PGPORT=5418
PGUSER=postgres

注意,数据库服务器端口已设置为 5418,便于区分 PostgreSQL 18 版本。在连接服务器时,需要确保使用正确的端口号。

此外,可通过 where 命令查看 PostgreSQL 可执行文件路径。

$ where pg_ctl
D:\stack\pg-18\bin\pg_ctl.exe

启动服务器

接下来可以启动服务器。若无异常,命令行将显示服务器已成功启动。

$ pg18-start.cmd
$ pushd D:\stack$ D:$ cd D:\stack\$ call pg18-vars.cmd$ ECHO Preparing for PostgreSQL 18
Preparing for PostgreSQL 18$ "D:\stack\pg-18\bin\pg_ctl" -D "D:\stack\pg-18\data" -l "D:\stack\logs\pg-18\logfile" start
waiting for server to start.... done
server started

打开任务管理器,可见 postgres 进程正在运行。
图片2.png

连接服务器

PostgreSQL 现自带 PgAdmin 4 图形化管理工具。该程序以前位于 pgAdmin 4\bin\pgadmin4.exe,现在位于 pgAdmin 4\runtime\pgAdmin4.exe。启动后,将打开基于浏览器的图形界面,用于连接服务器。

初次运行时,可能会出现安全提示,需要选择 Run Anyway 以继续:
图片3.png

启动完成后,将显示主界面:
图片4.png
图片5.png

点击 [Add new server] 添加新服务器,首先填写服务器标识信息。
图片6.png

接着输入服务器详细信息,与环境变量配置保持一致:

  • Host name/address:localhost
  • Port:5418
  • Maintenance database:postgres
  • User:postgres

图片7.png

点击 Save 后,服务器将显示在左侧面板中。展开该节点,即可看到服务器正在运行,状态为在线。
图片8.png

停止服务器

执行 pg-18-stop.cmd 即可停止服务器。

$ ECHO Preparing for PostgreSQL 18
Preparing for PostgreSQL 18$ "D:\stack\pg-18\bin\pg_ctl" -D "D:\stack\pg-18\data" -l "D:\stack\logs\pg-18\logfile" stop
waiting for server to shut down.... done
server stopped

服务器停止后,可直接关闭 PgAdmin 4 图形界面。

参考资料

以下页面提供更多参考信息:

  • pg_ctl 的说明可参考 PostgreSQL 官方文档,其中包含所有可执行操作及主要参数的详细解释。
  • initdb 的使用说明也可在官方文档中找到。
  • 本文早期版本针对 PostgreSQL 16,可在此网站查看。
  • 本文更早期版本针对 PostgreSQL 12,同样可在此网站查看。

本文旨在记录操作流程,便于复用与查阅。如对读者有所帮助,亦为本文价值所在。如有进一步建议或讨论,可通过 X(原 Twitter)@onghu、Mastodon @onghu@ruby.social 或 Bluesky @onghu.com 联系。

本文翻译自:https://notepad.onghu.com/2025/portable-postgresql-on-windows-without-installation-pg18/

http://www.dtcms.com/a/598670.html

相关文章:

  • 网站开发哪里培训好物联卡官方免费申请入口
  • 网站怎么做支付宝接口购买了网站如何使用
  • wordpress 抽奖aso优化服务站
  • 国产外骨骼机器人成跨境新爆单
  • 广州网站建设骏域伊春网站建设
  • 做网站厦门泗阳做网站
  • 成都网站建设 3e网络wordpress最新下载
  • 线上培训机构有哪些基本seo
  • yolov11n主干网络换为MobileNetv3
  • 做网站优化有前景吗wordpress 前台文件上传
  • UEC++ 创建默认子对象CreateDefaultSubobject
  • 免费直播网站贵州灵溪seo整站优化
  • 数字电路零基础入门教程
  • 自己做淘宝客登录网站进口网站建设
  • 网站怎么做搜索功能WordPress连接符
  • snapan项目--kkfileview介绍及部署(下)
  • WordPress插件--Markdown编辑器
  • 计算机图形学·13 构建模型
  • 营销型网站哪家做的好苏州网站优化找哪家
  • 嵌入式面试高频题:模拟电路+数字电路(含标准答案)
  • 长沙河东做网站深圳ui设计
  • 作业1111
  • 若依使用技巧
  • 高大上设计网站欣赏付费链接生成平台
  • 我是谁,我能干什么?
  • 加强医院网站建设网站的视频做gif
  • 简述网站建设的上海百度优化
  • 广州专业网站建设后台管理便捷o2o网站建设基本流程
  • Shell脚本定时备份数据库目录到远程服务器,并保留指定数量的备份
  • style wordpress 主题企业网站优化咨询