PostgreSQL命令行安装【静默安装】的全部流程

2,177 阅读7分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第4天,点击查看活动详情

想要实现通过GUI软件一键安装PostgreSQL的功能,免去手动安装的过程,也可以添加一些对pgsql服务的管理功能。

这就要用到PostgreSQL通过命令行静默安装,放在软件中实现控制,安装完成后,并内置初始化需要的数据库和表。

下载pgsql的zip安装版本

PostgreSQL下载地址:www.postgresql.org/download/

选择免安装的二进制zip包

下面可以看到PostgreSQL支持的window平台,比如14、13版本支持64位的windows 2019/2016。可以据此选择需要的版本。

选择一个window版本下载

pgsql二进制包安装和基本使用

【如果仅作为一个应用程序的内置数据库,则不需配置全局使用的PATH环境变量、配置或使用pgAdmin管理工具】,window服务或开机启动是需要配置的,需要长久运行

1. 解压二进制包

  • 将下载好的PostgreSQL二进制包解压到指定目录

解压后获得pgsql文件夹,如下C:\PostgreSQL\pgsql

  • 在解压后的pgsql主目录下创建data目录,作为数据存储目录

2. 配置PATH环境变量【可选】

此处介绍两种方式配置环境变量,powershell和vbs【也可以参考通过bat/cmd添加path环境变量】

最简单的方法是通过系统属性,高级系统设置,环境变量中设置。更更简单的是不设置此项。

powershell中配置环境变量

将通过C:\PostgreSQL\pgsql下的bin添加到PATH,$target='Machine'系统变量,$path判断是否以';'结尾。

$addPath='C:\PostgreSQL\pgsql\bin'; $target='Machine'; $path = [Environment]::GetEnvironmentVariable('Path', $target); if($path -match ";$"){ $newPath = $path + $addPath; } else { $newPath = $path + ';' + $addPath; } [Environment]::SetEnvironmentVariable('Path', $newPath, $target)

通过vbs配置环境变量

在pgsql文件夹下创建env.vbs文件,用于添加PATH,文件内容如下:

'on error resume next ''出错继续执行

'以管理员权限运行
Set WshShell = WScript.CreateObject("WScript.Shell") 
If WScript.Arguments.Length = 0 Then 
  Set ObjShell = CreateObject("Shell.Application") 
  ObjShell.ShellExecute "wscript.exe" _ 
  , """" & WScript.ScriptFullName & """ RunAsAdministrator", , "runas", 1 
  WScript.Quit 
End if

'添加PATH
set sysenv=CreateObject("WScript.Shell").Environment("system") 'system environment array

' WScript.ScriptFullName
set fso=createobject("scripting.filesystemobject")
Path = fso.GetParentFolderName(WScript.ScriptFullName) '正确

sysenv("Path")=sysenv("Path") + ";" + Path + "\bin" '正确

wscript.echo "PostgreSQL PATH Env Set Success!"

双击运行env.vbs文件,得到弹窗PostgreSQL PATH Env Set Success!,则PATH环境变量添加成功。

也可修改系统环境变量system,为用户环境变量USER

最好添加$path判断是否以';'结尾。

注意开头的管理员权限的代码一定要加上,否则会保存:

3. 初始化数据库

注:推荐以管理员权限或超级用户身份运行后续的各命令。

Windows下操作此处不需要管理员权限,但后续注册服务和启动服务需要。linux下尽量指定超级用户身份。

  • pgsql/bin目录下(以自己安装解压后的pgsql目录为准),以管理身份打开命令行或PowerShell窗口

以管理员打开powershell,进入pgsql/bin目录【如果设置第2步的PATH环境变量,则不需要进入此目录】

PS C:\WINDOWS\system32> cd C:\PostgreSQL\pgsql\bin\
PS C:\PostgreSQL\pgsql\bin>
  • initdb -D <data_path>初始化数据库,数据文件存储在data文件夹中

命令:initdb -D C:\PostgreSQL\pgsql\data【不推荐此命令】

  • 正确的或更为推荐的数据库初始化命令

initdb.exe 执行时默认使用本地化语言,进行数据库的字符编码、文本搜索等的初始化,相关设置为参数为-E, --encoding=ENCODING--locale=LOCALE

可以仔细看下之前的初始化时的输出:

PS C:\PostgreSQL\pgsql\bin> initdb -D C:\PostgreSQL\pgsql\data
属于此数据库系统的文件宿主为用户 "win7hostsver".
此用户也必须为服务器进程的宿主.
数据库簇将使用本地化语言 "Chinese (Simplified)_China.936"进行初始化.
本地化隐含的编码 "GBK" 不允许作为服务器端的编码.
默认的数据库编码将采用 "UTF8" 作为代替.
initdb: 无法为本地化语言环境"Chinese (Simplified)_China.936"找到合适的文本搜索配置
缺省的文本搜索配置将会被设置到"simple"

禁止为数据页生成校验和.

修复已存在目录 C:/PostgreSQL/pgsql/data 的权限 ... 成功
正在创建子目录 ... 成功
选择动态共享内存实现 ......windows
选择默认最大联接数 (max_connections) ... 100
选择默认共享缓冲区大小 (shared_buffers) ... 128MB
选择默认时区 ... Asia/Shanghai
创建配置文件 ... 成功
正在运行自举脚本 ...成功
正在执行自举后初始化 ...成功
同步数据到磁盘...成功

initdb: 警告: 为本地连接启用"trust"身份验证
你可以通过编辑 pg_hba.conf 更改或你下次
执行 initdb 时使用 -A或者--auth-local和--auth-host选项.

成功。您现在可以用下面的命令开启数据库服务器:

    ^"C^:^\PostgreSQL^\pgsql^\bin^\pg^_ctl^" -D ^"C^:^\PostgreSQL^\pgsql^\data^" -l 日志文件 start

由中文语言导致尝试采用GBK作为字符编码。因此最好直接指定UTF8

命令:initdb -E=UTF8 -D C:\PostgreSQL\pgsql\data【推荐此命令】

删除pgsql\data下的所有文件并重新执行。

4. 注册PostgreSQL服务

pg_ctl unregister -N <services_name>删除可能存在的windows服务注册

命令:pg_ctl unregister -N postgresql

> pg_ctl unregister -N postgresql
pg_ctl: 服务 "postgresql" 没有注册

删除之前曾经安装的服务pg_ctl unregister -N postgresql-x64-12

可以看到windows服务中,该服务已经没有

pg_ctl register -D <data_path>注册Windows服务(新增一个服务)

命令:pg_ctl register -D "C:\PostgreSQL\pgsql\data" 将会添加一个名为PostgreSQL(默认名称)的服务

命令:pg_ctl register -N "PostgreSQL-x64-14" -D "C:\PostgreSQL\pgsql\data" 通过-N指定服务名

如下,注册的两个服务:

注册的服务启动方式为“自动”。

net start <services_name>启动pgsql服务

也可以直接去windows服务里面找到注册的服务(如上图),右键手动启动

net start PostgreSQL-x64-14

> net start PostgreSQL-x64-14
PostgreSQL-x64-14 服务正在启动 .
PostgreSQL-x64-14 服务已经启动成功。

net stop <services_name>关闭pgsql服务

net stop PostgreSQL-x64-14

5. 创建默认的超级用户postgres

  • 创建并指定密码

通常,PostgreSQL的超级用户为postgres,二进制包安装时需要通过命令创建此用户。

[推荐下面指定密码] 命令:createuser --superuser postgrescreateuser -s postgres 将创建无密码的(超级)用户。显然必须指定密码

命令:createuser -s -P postgrescreateuser -s --pwprompt postgres

createuser [选项]... [用户名] 用户名放最后

输入命令回车后,输入密码

  • 使用postgres(超级)用户访问postgres数据库(默认安装的数据库)

命令:psql -U postgres -d postgres

6. 创建用户、数据库、切换数据库和用户

进行数据库、表、用户的初始化操作

直接使用PostgreSQL提供的命令(pgsql\bin)

  • 创建用户(非超级用户)、数据库:
PS C:\PostgreSQL\pgsql\bin> createuser -P myuser
为新角色输入的口令:
再输入一遍:
PS C:\PostgreSQL\pgsql\bin> createdb mydb -O=myuser
PS C:\PostgreSQL\pgsql\bin>

也可以使用--owner指定新数据库的所属用户:createdb mydb --owner=myuser

psql登陆后,在psql内的操作

  • 创建用户、数据库:
postgres=# create user user123 with password '123456';
CREATE ROLE
postgres=# create database db123 owner user123;
CREATE DATABASE
postgres=#
  • 切换数据库\c [database_name];切换用户\c - [user_name]
postgres=# \c db123
您现在已经连接到数据库 "db123",用户 "postgres".
db123=# \c - user123
您现在已经连接到数据库 "db123",用户 "user123".
db123=>

dropuser <user_name>删除用户

dropuser postgres

使用pg_ctl启动或关闭PostgreSQL进程

pg_ctl start -w启动pgsql进程

命令:pg_ctl start -w -D "C:\PostgreSQL\pgsql\data"

pg_ctl stop -w停止pgsql进程

命令:pg_ctl stop -w -D "C:\PostgreSQL\pgsql\data"

使用pgAdmin4访问数据库

在解压后的pgsql/可以找到PostgreSQL的GUI管理工具pgAdmin 4文件夹

进入其bin目录,双击pgAdmin4.exe运行

设置或输入主密码并登陆

之后就是正常pgAdmin4的使用了,之前介绍过,不再赘述。

参考

PostgreSQL的windows环境下安装和常用操作命令