psql命令行免密码

在 Shell 命令行中,使用 postgresql-client 连接 PostgreSQL 数据库时,每次都要输入密码。如果要写 Shell Script,做一些类似于备份的自动化管理工作,每次都还要手动输入密码是一件让人很不爽的事情,也没有实现真正意义上的自动化。

何如在连接 PostgreSQL 数据库时,不用手动输入密码,官方利用密码文件(Password File)提供了一种解决方案:

Unix/Linux 在用户家目录创建一个 .pgpass 隐藏文件或者是创建一个环境变量 PGPASSFILE 引用一个含有密码信息的文件(文件内容同 .pgpass 文件,此处文件名可随意,隐不隐藏都行),Windows 对应的是 %APPDATA%\postgresql\pgpass.conf 文件( %APPDATA% 是用户配置里面的 Application Data 子目录)。

该文件记录着连接数据库需要的所有信息,按下面数据格式,每行一条记录信息:

hostname:port:database:username:password
该文件中可以有注释内容,注释符号是 # 。

前四个字段可以是确定的字面值,也可以使用通配符 * 匹配所有。

连接数据库的时候,系统自动从前到后遍历该文件,使用最先匹配到的记录,因此,当你在文件中使用了通配符 * 的时候,应该优先把最具体的信息放在文件的最前面。

如果记录信息中包含 : 或 \ 这两个符号,需要对其进行转义,就是在字符前面加转义符号 \ 。

在 Unix/Linux 系统中 .pgpass 文件权限只能对用户自己开放,不能对用户组和其他人开放,就是说 .pgpass 文件对用户组和其他人是"不可读,不可写,不可执行"的,通常会赋予 .pgpass 文件权限 600 ,命令如下:

chmod 0600 ~/.pgpass
如果任何一个权限对用户组或其他人开放了,该文件就会被忽略。

利用环境变量 PGPASSFILE 引用的文件权限也要满足这个要求,否则同样会被忽略。

在 Windows 中,会假设该文件存放在一个安全的目录中,所有没有对其权限进行特别的检查。

至此,数据库对应的 .pgpass 文件设置完成,以后再连接数据库就不需要手动输入密码了,Shell Script 也能够实现真正意义上的自动化管理。

psql -h 10.150.10.150 -p 5432 -U postgres -d dbname – 到.pgpass文件中寻找匹配信息,如果没有,依然需要手动输入密码

数据备份

默认情况下postgresql不支持命令行中有密码,有时为了使用命令行定时备份,就需要workaround

  • 配置环境变量
    具体方法见 PostgreSQL 自动输入密码

  • 使用db url
    pg_dump.exe -Fc -v --dbname=postgresql://username:pass@127.0.0.1:5432/dbname -f a.bak

  • 使用脚本

@ECHO OFF
@setlocal enableextensions
@cd /d "%~dp0"set PGPASSWORD=12334
SET PGPATH="E:\Program Files\PostgreSQL\12\bin\"
SET SVPATH=e:\db-backup\
SET PRJDB=postgres
set d=%DATE:~0,4%%DATE:~5,2%%DATE:~8,2%%TIME:~0,2%%TIME:~3,2%%TIME:~6,2%SET DBDUMP=%PRJDB%_%d%.bak
@ECHO OFF
%PGPATH%pg_dump -Fc -v -n reporting -n scada -h 127.0.0.1 -U user -d  %PRJDB%  -f %SVPATH%%DBDUMP%echo Backup Taken Complete %SVPATH%%DBDUMP%forfiles /p %SVPATH% /d /m *.bak -5 /c "cmd /c echo deleting @file ... && del /f @path"

pgadmin去除master密码

在 #PGADMIN4#/v5/web/目录新建文件config_local.py
输入以下内容即可

MASTER_PASSWORD_REQUIRED=False

postgresql命令行(psql,pg_dump)密码输入的方法

默认情况下postgresql不支持命令行中有密码,有时为了使用命令行定时备份,就需要自动读取密码

psql

  • 使用.pgpass(linux)和pgpass.conf(win) 来存储密码, 参考PostgreSQL 自动输入密码
  • 使用环境变量PGPASSWORD
  • psql -c “\dt” “host=127.0.0.1 user=hello password=123 dbname=test”

pg_dump

  • 使用db url pg_dump.exe -Fc -v --dbname=postgresql://username:pass@127.0.0.1:5432/dbname -f a.bak
  • 使用脚本 postgresql备份
@ECHO OFF
@setlocal enableextensions
@cd /d "%~dp0"set PGPASSWORD=12334
SET PGPATH="E:\Program Files\PostgreSQL\12\bin\"
SET SVPATH=e:\db-backup\
SET PRJDB=postgres
set d=%DATE:~0,4%%DATE:~5,2%%DATE:~8,2%%TIME:~0,2%%TIME:~3,2%%TIME:~6,2%SET DBDUMP=%PRJDB%_%d%.bak
@ECHO OFF
%PGPATH%pg_dump -Fc -v -n reporting -n scada -h 127.0.0.1 -U user -d  %PRJDB%  -f %SVPATH%%DBDUMP%echo Backup Taken Complete %SVPATH%%DBDUMP%forfiles /p %SVPATH% /d /m *.bak -5 /c "cmd /c echo deleting @file ... && del /f @path"

postgresql tips相关推荐

  1. PostgreSQL的那点事儿

    疯狗 · 2013/07/09 16:52 今天无意发现了个PostgreSQL环境,线上学习了下,一般的数据注射(读写数据库)差异不大,不做讨论,个人比较关心PostgreSQL的文件读取和命令执行 ...

  2. 从pg_hba.conf文件谈谈postgresql的连接认证

    最近一直在弄postgresql的东西,搭建postgresql数据库集群环境什么的.操作数据库少不得要从远程主机访问数据库环境,例如数据库管理员的远程管理数据库,远程的客户存取数据库文件. 而在po ...

  3. PostgreSQL and SQLAlchemy [ubuntu]

    文章目录 PostgreSQL 安装PostgreSQL 常用PostgreSQL命令 常用PostgreSQL操作 修改用户密码 添加用户并设置密码 创建数据库并指定一个拥有者 连接另一个数据库 删 ...

  4. Spring Tips: The Wavefront Observability Platform

    Engineering Josh Long April 29, 2020 speaker: Josh Long (@starbuxman) Hi, Spring fans! Welcome to an ...

  5. Postgresql数据库介绍10——使用

    索引(Indexes) Indexes are a common way to enhance database performance. An index allows the database s ...

  6. PostgreSQL 数据恢复工具

    PostgreSQL 本身不具备数据闪回和数据误删除保护功能,但在不同场景下也有对应的解决方案.本文由作者在 2021 PCC 大会的演讲主题<PostgreSQL 数据找回>整理而来,介 ...

  7. 一个PostgreSql cli的工具

    GitHub - xuejiazhi/pgii: pgii is a PostgreSql cli tool. PostgreSql is developed in CMD or Golang and ...

  8. PostgreSQL 介绍与安装 —— 千月的零基础学习PostgreSQL(1)

    PostgreSQL 介绍与安装 1.PostgreSQL 介绍(官方) PostgreSQL是一个强大的开源对象关系数据库系统,它使用和扩展了SQL语言,结合了许多存储和处理最复杂的数据工作的特性. ...

  9. 【ShardingSphere-proxy +PostgreSQL实现读写分离(静态策略)】

    在业务对数据库是读多写少,且单台服务器或者单个数据库的性能已经不能满足当前业务对数据库大量读取请求的时候,我们可能需要对数据库做读写分离. 常见的可以做读写分离的工具有mycat.ShardingSp ...

最新文章

  1. 想要彻底搞懂“异地多活”,看完这篇就够了
  2. Xilinx_ISE 14.7在Win10下选择“open project”崩溃闪退的问题
  3. mongo 3t 处理时间
  4. 2.2 Spring属性注入-构造方法
  5. 一文解读:如何从 0 到 1 打造小程序爆款裂变
  6. java定义一个方法,返回一个整数数组的元素平均值
  7. 计算机视觉论文-2021-07-02
  8. opencv光流例程_OpenCV 4.4 发布!新增YOLOv4 和 EfficientDet 推断支持
  9. 未能加载文件或程序集mysql.web.v20__关于MySQL Server影响ASP.NET网站使用的问题:未能加载文件或程序集MySql.Web.v20...
  10. python绘图函数返回_python – Matplotlib返回一个绘图对象
  11. python selenium在编写过程中遇到的问题记录2
  12. 廖雪峰 - nodejs教程
  13. 梦幻西游五虎将访谈系列:主策划小白
  14. 计算机考试报名照片可以是白底吗,软考报名照片必须白底的是吗?
  15. 软件接口与性能测试,接口测试与性能测试有什么区别?
  16. 大话数据结构学习笔记(8)二叉树
  17. Python 爬虫 爬取 煎蛋网 图片
  18. 美团企业版:地利尚可,天时不足
  19. 初学c语言试写的答题系统
  20. 通过Dig来学DNS

热门文章

  1. 全球首个 AI 说唱歌手 TikTok 发新歌,东西方审美差异巨大
  2. Object.assign()用法和特性
  3. pmp考试是什么?有没有含金量?值得考吗?(附2023 年考试时间、备考资料)
  4. mp4文件播放不了怎么办?
  5. Apriori算法Matlab实现
  6. Log BERT 日志异常检测
  7. Python定义全局变量的用法
  8. 我可以抱你吗?linux
  9. IP网络主动测评系统
  10. TIME_WAIT和CLOSE_WAIT状态区别