想要实现通过GUI软件一键安装PostgreSQL的功能,免去手动安装的过程,也可以添加一些对pgsql服务的管理功能。
这就要用到PostgreSQL通过命令行静默安装,放在软件中实现控制,安装完成后,并内置初始化需要的数据库和表。
下载pgsql的zip安装版本
PostgreSQL下载地址:https://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 postgres
或 createuser -s postgres
将创建无密码的(超级)用户。显然必须指定密码
命令:createuser -s -P postgres
或 createuser -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的使用了,之前介绍过,不再赘述。