用户登录
用户注册

分享至

postgresql 数据库备份

  • 作者: 比胸罩更贴心的男
  • 来源: 51数据库
  • 2020-10-03
PostgreSQL自带一个客户端pgAdmin,里面有个备份,恢复选项,也能对数据库进行备份 恢复(还原),但最近发现数据库慢慢庞大的时候,经常出错,备份的文件过程中出错的几率那是相当大,手动调节灰常有限。所以一直寻找完美的备份恢复方案。

梦里寻他千百度,伊人却在灯火阑珊处...其实PostgreSQL内置不少的工具,寻找的备份恢复方案就在其中:pg_dump,psql。这两个指令 在数据库的安装目录下,比如我自己本地安装的,路径形如:C:\Program Files\PostgreSQL\9.5\;然后进入到bin文件夹,会看到不少的exe文件,这就是PostgreSQL内置的工具了。里面会找到 pg_dump.exe,psql.exe两个文件。我们怎么用他们?
用法:
备份数据库,指令如下:
pg_dump -h 164.82.233.54 -U postgres databasename > C:\databasename.bak

开始-运行-cmd 弹出dos控制台;然后 在控制台里,进入PostgreSQL安装目录bin下:
cd C:\Program Files\PostgreSQL\9.0\bin
最后执行备份指令:
pg_dump -h 164.82.233.54 -U postgres databasename > C:\databasename.bak

指令解释:如上命令,pg_dump 是备份数据库指令,164.82.233.54是数据库的ip地址(必须保证数据库允许外部访问的权限哦~),当然本地的数据库ip写 localhost;postgres 是数据库的用户名;databasename 是数据库名。> 意思是导出到C:\databasename.bak文件里,如果没有写路径,单单写databasename.bak文件名,那么备份文件会保存在C: \Program Files\PostgreSQL\9.0\bin 文件夹里。

恢复数据库,指令如下:
psql -h localhost -U postgres -d databasename < c:\databasename.bak(测试没有成功)="" pg_restore.exe="" --host="" localhost="" --port="" 5432="" --username="" "postgres"="" --dbname="" "symbolmcnew"="" --no-password="" --verbose="" "databasename.backup"(测试成功)="" 指令解释:如上命令,psql是恢复数据库命令,localhost是要恢复到哪个数据库的地址,当然你可以写上ip地址,也就是说能远程恢复(必须保证="" 数据库允许外部访问的权限哦~);postgres="" 就是要恢复到哪个数据库的用户;databasename="">< 的意思是把c:\databasename.bak文件导入到指定的数据库里。="" 以上所有的是针对windows而言的,如果在linux下,会不会有效?="" 在linux里依然有效。有一个值得注意的是:如果直接进入postgresql的安装目录bin下,执行命令,可能会出现="" 找不到pg_dump,psql的现象,我们在可以这样:="" 备份:="" pt/postgresql/9.5/bin/pg_dump="" -h="" 164.82.233.54="" -u="" postgres="" databasename=""> databasename.bak

恢复:
/opt/PostgreSQL/9.5/bin/psql -h localhost -U postgres -d databasename <>



  目前没有现成的函数可以做到通过键值更新json中的值,也无法插入一对键值。
对于这种键值对类型的json数据,可以考虑转换成text,然后由text进行运算,再转换成json值。示例如下:
with?s?as?(select?'{"a":"hello",?"b":"world!"}'::json?as?j1)
select?s.j1,?j1::text?as?j2,
replace(j1::text,?(s.j1->'b')::text,?'"andy"'::text)::json?as?j2,?--?替换b键值的内容
(replace(s.j1::text,?'}',?'')?||?','?||?replace(('{"c":"?ok?"}'::json)::text,?'{',?''))::json?as?j3??--?添加一个键值对,目前未能插入到指定位置
from?s;
软件
前端设计
程序设计
Java相关