Windows下在命令行安装postgresql,并注册成window服务;产品内置postgre

Windows下免安装postgresql,并注册成服务

最近做的一些产品,需要内置postgre数据库,肯定是希望到时候一键启动,直接注册成服务,不需要用户再去安装,所以倒腾了半天,网上找了很多资料,但是感觉都不是很全面,现在记录一下。

  • 下载postgre包
    下载地址:https://www.postgresql.org/download/
    如下图进行下载
    选择windows
    选择zip包
    选择某个版本进行下载
  • postgre基本准备
    1.解压文件。
    2.在主目录下创建data目录作为数据存储目录
    3.切换到bin目录,进行dos窗口
    4.初始化pgsql:
initdb.exe -D ../data

5.启动pgsql,启动完以后不要关闭窗口

pg_ctl.exe start -D ..\data

6.现在这个时候还是不能登录的,重新打开一个窗口,进入bin目录,连接pgsql

psql postgres

其实这个就是使用默认的postgres用户来登录,登录成功以后就进入了postgre的操作界面。但是你使用一些连接工具,并不能连接上,我查了一些资料,说是没有创建postgres这个角色,需要创建一下,再打开一个dos窗口,输入:

createuser -s -r postgres

然后接下来你就可以连接了,localhost,5432,数据库是postgres,用户名是postgres,密码随便输入。

7.我们现在创建一个数据库,在上一步中(psql postgres)的操作界面中直接输入:

create database testdatabase;

8.现在数据库是没有密码的,现在给加个密码:

alter user postgres with password 'newpassword';

但是现在还没有生效,就算退出去重新进入,也不需要输入密码,因为采用的是信任模式。
9. 在data目录下,打开pg_hba.conf文件,修改如下位置:
修改成md5
10. 然后使用步骤5重新启动一下,然后使用连接工具的时候必须输入密码才行。这边也看到了好多网友进行密码重置的一些方案,把md5改回trust,然后修改密码,然后再改回md5就可以了。

  • postgre服务注册

1.还是在bin目录下进行dos窗口:

pg_ctl.exe register -N "pgsql" -D D:psql\data 

千万注意这个-D目录,这个地方必须要写绝对路径,我之前写的相对路径,结果服务注册成功以后,一直起不来,最后通过网友写的查看windows的日志才发现了问题所在。

2.然后就可以启动服务了:

sc start pgsql;或者:net start pgsql;

假如启动失败了,我后续写一篇博文介绍一下如何查看windows日志,能够直接看到启动服务所报的错。
友情链接:https://blog.csdn.net/ywg_1994/article/details/82430943

  • 内置数据库以及启动脚本的书写

    开篇就提到了,我们是要内置数据库,所以初始化数据库,数据库的创建,表的创建,密码的设置,都完成了,现在要做的就是在产品启动的时候去注册pgsql的服务,然后启动就行。
    产品目录比如是:bin\startup.bat,pgsql的安装目录postgre和bin是同级的,我在这个启动脚本里面要去写注册服务的脚本。
    这是产品目录
    脚本里面这样写:

cd ..
set pgsql_home=%cd%\postgre
cd %pgsql_home%\bin
pg_ctl.exe register -N "pgsql" -D %pgsql_home%\data
net start pgsql

这样写的话,每次都会注册服务并且去启动,会打出比如:服务已经注册,服务已经启动之类的话,虽然没有什么影响,但是做一些判断的话,应该只需要注册一次并启动一次就行。现在还没有做,等以后有需求的话再说。

  • postgre设置ip白名单

需要修改data目录下的两个配置文件:
pg_hba.conf和postgresql.conf

pg_hba.conf

查找IPv4 local connections
修改默认的

host all all 127.0.0.1/32 trust

重点修改一下ADDRESS属性。

host all all 192.168.1.1/32 trust #IP全匹配
或
host all all 192.168.1.1/24 trust #IP匹配前三段
或
host all all 0.0.0.0/0 trust #全部允许
postgresql.conf

查找 Connection Settings
修改默认的

listen_addresses = 'localhost'

上述配置,默认是注释掉的。

listen_addresses = '*'

然后重启一下pgsql,即可。

猜你喜欢

转载自blog.csdn.net/ywg_1994/article/details/82391531