pgsql的数据备份和恢复
cd /opt/opsmgr/web/components/postgresql96linux64.1/bin进入对应的pg数据库的bin目录下:执行备份操作./pg_dump -U postgres -d hosp_xxx > /home/backup/hosp_xxx.sql执行恢复操作/psql -U postgres -d hosp_xxx < /home/...
cd /opt/opsmgr/web/components/postgresql96linux64.1/bin
进入对应的pg数据库的bin目录下:
执行备份操作
./pg_dump -U postgres -d hosp_xxx > /home/backup/hosp_xxx.sql
执行恢复操作
/psql -U postgres -d hosp_xxx < /home/backup/hosp_xxx.sql
当然也可以增加其他参数
执行备份操作
./pg_dump -h 10.19.125.197 -p 7017 -U nms_nmsdb_user -d nms_nmsdb > /home/backup/nms_nmsdb.sql
执行恢复操作
./psql -h 10.19.125.197 -p 7017 -U nms_nmsdb_user -d nms_nmsdb < /home/backup/nms_nmsdb.sql
其他参数可以参考:
http://blog.sina.com.cn/s/blog_e964c8bd0102vb3n.html
http://blog.sina.com.cn/s/blog_8840603d0102wku9.html
在linux中Postgresql数据库如何执行脚本文件
(2016-07-08 10:43:51)
转载▼
标签: itlinuxpostgrespostgresql | 分类: postgresql |
在linux中Postgresql数据库如何恢复数据库?执行sql脚本文件呢?具体步骤如下:
一、恢复数据库备份文件
1、将数据库备份文件xxx.backup用连接工具拷贝到/opt下,这个不固定,位置随意放;
2、在linux中打开终端,切换到postgres用户,命令是
su - postgres (创建postgresql数据库时创建的用户),
然后cd到你安装的postgresql的bin目录下,我的安装在/opt下, 命令是
cd /opt/postgres/9.3/bin
打开之后输入命令
./psql
输入你的数据库密码,进入postgres数据库;
3、先创建好你的数据库,命令
create database xxx;
4、然后为xxx数据库恢复数据库备份文件,命令是
./pg_restore -U postgres -W -d xxx(你的数据库) -v "/opt/xxx.backup"(你的备份文件位置)
二、在postgres中执行sql脚本文件
1、在linux中打开终端,切换到postgres用户,然后cd到你安装的postgresql的bin目录下(同上),
cd /opt/postgres/9.3/bin
2、将你的xxx.sql文件拷贝至/opt/下,然后执行的命令如下
./psql -s xxx(xxx是你要执行的数据库) -f /opt/xxx.sql
三、科普下
1、数据库备份,命令如下:
./pg_dump -h localhost -p 5432 -U postgres -W -F c -b -v -f "/opt/xxx.backup" xxx
2.在数据库安装目录bin下,./psql 进入数据库,输入密码,\c xxx(数据库名称) 进入指定数据库
\i 文件路径
pgsql的命令网站
http://blog.sina.com.cn/s/blog_e964c8bd0102vb3n.html
广告
×新浪首页登录注册
v殺手v的博客
http://blog.sina.com.cn/chenjunweibk [订阅][手机订阅]
首页博文目录关于我
个人资料
v殺手v
v殺手v
微博
加好友发纸条
写留言加关注
博客十周年地图
博客等级:
博客积分:27积分
博客访问:8,054
关注人气:0
获赠金笔:0
赠出金笔:0
荣誉徽章:点亮荣誉勋章兑换图片博主服务兑换私密博文兑换金笔
相关博文
妆面轻透水光,皮肤仿佛会呼吸,韩系极净无瑕氧气底妆秘诀!
鸟语花香
草船借箭,曹操为何不放火箭呢?
知历史
高血压“前期”同样危险
叶金朝
原来所有的“养生”都是徒劳的!看完后不再纠结了
阚兆成
苏宁6.18促销挑战京东价格再低10%背后是零售生态价值的释放
贾敬华
句容市伏热花海
马奔摄影
张洪泉:一封信让我看到了青岛东营两地书记的格局
张洪泉
肖战后援会改名:肖战影音会,以实际行动传递正能量!
飘雨桐
【实拍】走进“京城最美书店”,阅读空间宛若太虚幻境
美行天下
上周热点冲高明天观点还看我
風雲在线66
更多>>
推荐博文
查看更多>>
正文字体大小:大 中 小
PostgreSQL数据库备份和恢复命令 (2014-11-10 16:30:10)
标签: it
七、pg_dump:
pg_dump是一个用于备份PostgreSQL数据库的工具。它甚至可以在数据库正在并发使用时进行完整一致的备份,而不会阻塞其它用户对数据库的访问。该工具生成的转储格式可以分为两种,脚本和归档文件。其中脚本格式是包含许多SQL命令的纯文本格式,这些SQL命令可以用于重建该数据库并将之恢复到生成此脚本时的状态,该操作需要使用psql来完成。至于归档格式,如果需要重建数据库就必须和pg_restore工具一起使用。在重建过程中,可以对恢复的对象进行选择,甚至可以在恢复之前对需要恢复的条目进行重新排序。该命令的使用方式如下:
pg_dump [option...] [dbname]
1. 命令行选
选项 说明
-a(--data-only) 只输出数据,不输出模式(数据对象的定义)。这个选项只是对纯文本格式有意义。对于归档格式,你可以在调用 pg_restore时指定选项。
-b(--blobs) 在dump中包含大对象。
-c(--clean) 在输出创建数据库对象的SQL命令之前,先输出删除该数据库对象的SQL命令。这个选项只是对纯文本格式有意义。对于归档格式,你可以在调用 pg_restore时指定选项。
-C(--create) 先输出创建数据库的命令,之后再重新连接新创建的数据库。对于此种格式的脚本,在运行之前是和哪个数据库进行连接就不这么重要了。这个选项只是对纯文本格式有意义。对于归档格式,你可以在调用pg_restore时指定选项。
-E encoding 以指定的字符集创建该dump文件。
-f file 输出到指定文件,如果没有该选项,则输出到标准输出。
-F format
p(plain): 纯文本格式的SQL脚本文件(缺省)。c(custom): 输出适合于pg_restore的自定义归档格式。 这是最灵活的格式,它允许对装载的数据和对象定义进行重新排列。这个格式缺省的时候是压缩的。t(tar): 输出适合于 pg_restore的tar归档文件。使用这个归档允许在恢复数据库时重新排序和/或把数据库对象排除在外。同i时也可能可以在恢复的时候限制对哪些数据进行恢复。
-n schema 只转储schema的内容。如果没有声明该选项,目标数据库中的所有非系统模式都会被转储。该选项也可以被多次指定,以指定不同pattern的模式。
-N schema 不转储匹配schema的内容,其他规则和-n一致。
-o(--oids) 作为数据的一部分,为每个表都输出对象标识(OID)。
-O(--no-owner) 不输出设置对象所有权的SQL命令。
-s(--schema-only) 只输出对象定义(模式),不输出数据。
-S username 指定关闭触发器时需要用到的超级用户名。它只有在使用--disable-triggers的时候才有关系。
-t table 只输出表的数据。很可能在不同模式里面有多个同名表,如果这样,那么所有匹配的表都将被转储。通过多次指定该参数,可以一次转储多张表。这里还可以指定和psql一样的pattern,以便匹配更多的表。(关于pattern,基本的使用方式是可以将它视为unix的通配符,即*表示任意字符,?表示任意单个字符,.(dot)表示schema和object之间的分隔符,如a*.b*,表示以a开头的schema和以b开头的数据库对象。如果没有.(dot),将只是表示数据库对象。这里也可以使用基本的正则表达式,如[0-9]表示数字。)
-T table 排除指定的表,其他规则和-t选项一致。
-x(--no-privileges) 不导出访问权限信息(grant/revoke命令)。
-Z 0..9 声明在那些支持压缩的格式中使用的压缩级别。 (目前只有自定义格式支持压缩)
--column-inserts 导出数据用insert into table_name(columns_list) values(values_list)命令表示,这样的操作相对其它操作而言是比较慢的,但是在特殊情况下,如数据表字段的位置有可能发生变化或有新的字段插入到原有字段列表的中间等。由于columns_list被明确指定,因此在导入时不会出现数据被导入到错误字段的问题。
--inserts 导出的数据用insert命令表示,而不是copy命令。即便使用insert要比copy慢一些,但是对于今后导入到其他非PostgreSQL的数据库是比较有意义的。
--no-tablespaces 不输出设置表空间的命令,如果带有这个选项,所有的对象都将恢复到执行pg_restore时的缺省表空间中。
--no-unlogged-table-data 对于不计入日志(unlogged)的数据表,不会导出它的数据,至于是否导出其Schema信息,需要依赖其他的选项而定。
-h(--host=host) 指定PostgreSQL服务器的主机名。
-p(--port=port) 指定服务器的侦听端口,如不指定,则为缺省的5432。
-U(--username=username) 本次操作的登录用户名,如果-O选项没有指定,此数据库的Owner将为该登录用户。
-w(--no-password) 如果当前登录用户没有密码,可以指定该选项直接登录。
2. 应用示例:
# -h: PostgreSQL服务器的主机为192.168.149.137。
# -U: 登录用户为postgres。
# -t: 导出表名以test开头的数据表,如testtable。
# -a: 仅仅导出数据,不导出对象的schema信息。
# -f: 输出文件是当前目录下的my_dump.sql
# mydatabase是此次操作的目标数据库。
/> pg_dump -h 192.168.149.137 -U postgres -t test* -a -f ./my_dump.sql mydatabase
#-c: 先输出删除数据库对象的SQL命令,在输出创建数据库对象的SQL命令,这对于部署干净的初始系统或是搭建测试环境都非常方便。
/> pg_dump -h 192.168.220.136 -U postgres -c -f ./my_dump.sql mydatabase
#导出mydatabase数据库的信息。在通过psql命令导入时可以重新指定数据库,如:/> psql -d newdb -f my_dump.sql
/> pg_dump -h 192.168.220.136 -U postgres -f ./my_dump.sql mydatabase
#导出模式为my_schema和以test开头的数据库对象名,但是不包括my_schema.employee_log对象。
/> pg_dump -t 'my_schema.test*' -T my_schema.employee_log mydatabase > my_dump.sql
#导出east和west模式下的所有数据库对象。下面两个命令是等同的,只是后者使用了正则。
/> pg_dump -n 'east' -n 'west' mydatabase -f my_dump.sql
/> pg_dump -n '(east|west)' mydatabase -f my_dump.sql
八、pg_restore:
pg_restore用于恢复pg_dump导出的任何非纯文本格式的文件,它将数据库重建成保存它时的状态。对于归档格式的文件,pg_restore可以进行有选择的恢复,甚至也可以在恢复前重新排列数据的顺序。
pg_restore可以在两种模式下操作。如果指定数据库,归档将直接恢复到该数据库。否则,必须先手工创建数据库,之后再通过pg_restore恢复数据到该新建的数据库中。该命令的使用方式如下:
pg_restore [option...] [filename]
1. 命令行选项列表:
选项 说明
filename 指定要恢复的备份文件,如果没有声明,则使用标准输入。
-a(--data-only) 只恢复数据,而不恢复表模式(数据对象定义)。
-c(--clean) 创建数据库对象前先清理(删除)它们。
-C(--create) 在恢复数据库之前先创建它。(在使用该选项时,数据库名需要由-d选项指定,该选项只是执行最基本的CREATE DATABASE命令。需要说明的是,归档文件中所有的数据都将恢复到归档文件里指定的数据库中)。
-d dbname 与数据库dbname建立连接并且直接恢复数据到该数据库中。
-e(--exit-on-error)
如果在向数据库发送SQL命令的时候遇到错误,则退出。缺省是继续执行并且在恢复结束时显示一个错误计数。
-F format 指定备份文件的格式。由于pg_restore会自动判断格式,因此指定格式并不是必须的。如果指定,它可以是以下格式之一:t(tar): 使用该格式允许在恢复数据库时重新排序和/或把表模式信息排除出去,同时还可能在恢复时限制装载的数据。 c(custom):该格式是来自pg_dump的自定义格式。这是最灵活的格式,因为它允许重新对数据排序,也允许重载表模式信息,缺省情况下这个格式是压缩的。
-I index 只恢复指定的索引。
-l(--list) 列出备份中的内容,这个操作的输出可以作为-L选项的输入。注意,如果过滤选项-n或-t连同-l选项一起使用的话,他们也将限制列出的条目。
-L list-file 仅恢复在list-file中列出的条目,恢复的顺序为各个条目在该文件中出现的顺序,你也可以手工编辑该文件,并重新排列这些条目的位置,之后再进行恢复操作,其中以分号(;)开头的行为注释行,注释行不会被导入。
-n namespace 仅恢复指定模式(Schema)的数据库对象。该选项可以和-t选项联合使用,以恢复指定的数据对象。
-O(--no-owner) 不输出设置对象所有权的SQL命令。
-P function-name(argtype [, ...])
只恢复指定的命名函数。该名称应该和转储的内容列表中的完全一致。
-s(--schema-only) 只恢复表结构(数据定义)。不恢复数据,序列值将重置。
-S username 指定关闭触发器时需要用到的超级用户名。它只有在使用--disable-triggers的时候才有关系。
-t table 只恢复指定表的Schema和/或数据,该选项也可以连同-n选项指定模式。
-x(--no-privileges) 不恢复访问权限信息(grant/revoke命令)。
-1(--single-transaction) 在一个单一事物中执行恢复命令。这个选项隐含包括了--exit-on-error选项。
--no-tablespaces 不输出设置表空间的命令,如果带有这个选项,所有的对象都将恢复到执行pg_restore时的缺省表空间中。
--no-data-for-failed-tables 缺省情况下,即使创建表失败了,如该表已经存在,数据加载的操作也不会停止,这样的结果就是很容易导致大量的重复数据被插入到该表中。如果带有该选项,那么一旦出现针对该表的任何错误,对该数据表的加载将被忽略。
--role=rolename 以指定的角色名执行restore的操作。通常而言,如果连接角色没有足够的权限用于本次恢复操作,那么就可以利用该选项在建立连接之后再切换到有足够权限的角色。
-h(--host=host) 指定PostgreSQL服务器的主机名。
-p(--port=port) 指定服务器的侦听端口,如不指定,则为缺省的5432。
-U(--username=username) 本次操作的登录用户名,如果-O选项没有指定,此数据库的Owner将为该登录用户。
-w(--no-password) 如果当前登录用户没有密码,可以指定该选项直接登录。
2. 应用示例:
#先通过createdb命令,以myuser用户的身份登录,创建带恢复的数据newdb
/> createdb -U myuser newdb
#用pg_restore命令的-l选项导出my_dump.dat备份文件中导出数据库对象的明细列表。
/> pg_restore -l my_dump.dat > db.list
/> cat db.list
2; 145344 TABLE species postgres
4; 145359 TABLE nt_header postgres
6; 145402 TABLE species_records postgres
8; 145416 TABLE ss_old postgres
10; 145433 TABLE map_resolutions postgres
#将以上列表文件中的内容修改为以下形式。
#主要的修改是注释掉编号为2、4和8的三个数据库对象,同时编号10的对象放到该文件的头部,这样在基于该列表
#文件导入时,2、4和8等三个对象将不会被导入,在恢复的过程中将先导入编号为10的对象的数据,再导入对象6的数据。
/> cat new_db.list
10; 145433 TABLE map_resolutions postgres
;2; 145344 TABLE species postgres
;4; 145359 TABLE nt_header postgres
6; 145402 TABLE species_records postgres
;8; 145416 TABLE ss_old postgres
#恢复时指定的数据库是newdb,导入哪些数据库对象和导入顺序将会按照new_db.list文件中提示的规则导入。
/> pg_restore -d newdb -L new_db.list my_dump.dat
九、psql:
PostgreSQL的交互终端,等同于Oracle中的sqlplus。
1. 常用命令行选项列表:
选项 说明
-c command 指定psql执行一条SQL命令command(用双引号括起),执行后退出。
-d dbname 待连接的数据库名称。
-E 回显由\d和其他反斜杠命令生成的实际查询。
-f filename 使用filename文件中的数据作为命令输入源,而不是交互式读入查询。在处理完文件后,psql结束并退出。
-h hostname 声明正在运行服务器的主机名
-l 列出所有可用的数据库,然后退出。
-L filename 除了正常的输出源之外,把所有查询记录输出到文件filename。
-o filename 将所有查询重定向输出到文件filename。
-p port 指定PostgreSQL服务器的监听端口。
-q --quiet 让psql安静地执行所处理的任务。缺省时psql将输出打印欢迎和许多其他信息。
-t --tuples-only 关闭打印列名称和结果行计数脚注等信息。
-U username 以用户username代替缺省用户与数据库建立连接。
2. 命令行选项应用示例:
#-d: 指定连接的数据库。
#-U: 指定连接的用户。
#-c: 后面的SQL语句是本次操作需要执行的命令。
/> psql -d posgres -U postgres -c "select * from testtable"
i
---
1
2
3
5
(4 rows)
#-t: 没有输出上面输出结果中的字段标题信息和行数统计信息。
#-q:该选项和-t选项联合使用,非常有利于自动化脚本。如:
# select 'copy ' || tablename || ' to ' || tablename || '.sql' from pg_tables
#由以上sql语句生成的结果集,在重定向到输出文件后,可以作为下一次psql的输入执行。
/> psql -t -q -c "select * from testtable"
1
2
3
5
#-l: 列出当前系统中可用的数据库。
/> psql -l
List of databases
Name | Owner | Encoding | Collation | Ctype | Access privileges
------------+----------+----------+-------------+-------------+-----------------------
mydatabase | myuser | UTF8 | zh_CN.UTF-8 | zh_CN.UTF-8 |
postgres | postgres | UTF8 | zh_CN.UTF-8 | zh_CN.UTF-8 |
... ...
(4 rows)
#-o: 将查询语句的数据结果输出到指定文件。
/> psql -c "select * from testtable" -o out
/> cat out
i
---
1
2
3
5
(4 rows)
3. 内置命令列表:
psql内置命令的格式为反斜杠后面紧跟一个命令动词,之后是任意参数。参数与命令动词以及其他参数之间可以用空白符隔开,如果参数里面包含空白符,该参数必须用单引号括起,如果参数内包含单引号,则需要用反斜杠进行转义,此外单引号内的参数还支持类似C语言printf函数所支持的转义关键字,如\t、\n等。
命令 说明
\a 如果目前的表输出格式是不对齐的,切换成对齐的。如果是对齐的,则切换成不对齐。
\cd [directory] 把当前工作目录切换到directory。没有参数则切换到当前用户的主目录。
\C [title] 为查询结果添加表头(title),如果没有参数则取消当前的表头。
\c [dbname [ username] ] 连接新的数据库,同时断开当前连接。如果dbname参数为-,表示仍然连接当前数据库。如果忽略username,则表示继续使用当前的用户名。
\copy 其参数类似于SQL copy,功能则几乎等同于SQL copy,一个重要的差别是该内置命令可以将表的内容导出到本地,或者是从本地导入到数据库指定的表,而SQL copy则是将表中的数据导出到服务器的某个文件,或者是从服务器的文件导入到数据表。由此可见,SQL copy的效率要优于该内置命令。
\d [pattern] 显示和pattern匹配的数据库对象,如表、视图、索引或者序列。显示所有列,它们的类型,表空间(如果不是缺省的)和任何特殊属性。
\db [pattern] 列出所有可用的表空间。如果声明了pattern, 那么只显示那些匹配模式的表空间。
\db+ [pattern] 和上一个命令相比,还会新增显示每个表空间的权限信息。
\df [pattern] 列出所有可用函数,以及它们的参数和返回的数据类型。如果声明了pattern,那么只显示匹配(正则表达式)的函数。
\df+ [pattern] 和上一个命令相比,还会新增显示每个函数的附加信息,包括语言和描述。
\distvS [pattern] 这不是一个单独命令名称:字母 i、s、t、v、S 分别代表索引(index)、序列(sequence)、表(table)、视图(view)和系统表(system table)。你可以以任意顺序声明部分或者所有这些字母获得这些对象的一个列表。
\dn [pattern] 列出所有可用模式。如果声明了pattern,那么只列出匹配模式的模式名。
\dn+ [pattern] 和上一个命令相比,还会新增显示每个对象的权限和注释。
\dp [pattern] 生成一列可用的表和它们相关的权限。如果声明了pattern, 那么只列出名字可以匹配模式的表。
\dT [pattern] 列出所有数据类型或只显示那些匹配pattern的。
\du [pattern] 列出所有已配置用户或者只列出那些匹配pattern的用户。
\echo text [ ... ] 向标准输出打印参数,用一个空格分隔并且最后跟着一个新行。如:\echo `date`
\g [{filename | |command}] 把当前的查询结果缓冲区的内容发送给服务器并且把查询的输出存储到可选的filename或者把输出定向到一个独立的在执行 command的Unix shell。
\i filename 从文件filename中读取并把其内容当作从键盘输入的那样执行查询。
\l 列出服务器上所有数据库的名字和它们的所有者以及字符集编码。
\o [{filename | |command}] 把后面的查询结果保存到文件filename里或者把后面的查询结果定向到一个独立的shell command。
\p 打印当前查询缓冲区到标准输出。
\q 退出psql程序。
\r 重置(清空)查询缓冲区。
\s [filename] 将命令行历史打印出或是存放到filename。如果省略filename,历史将输出到标准输出。
\t 切换是否输出列/字段名的信息头和行记数脚注。
\w {filename | |command} 将当前查询缓冲区输出到文件filename或者定向到Unix命令command。
\z [pattern] 生成一个带有访问权限列表的数据库中所有表,视图和序列的列表。如果给出任何pattern,则被当成一个规则表达式,只显示匹配的表,视图和序列。
\! [command] 返回到一个独立的Unix shell或者执行Unix命令command。参数不会被进一步解释,shell将看到全部参数。
4. 内置命令应用示例:
在psql中,大部分的内置命令都比较易于理解,因此这里只是给出几个我个人认为相对容易混淆的命令。
# \c: 其中横线(-)表示仍然连接当前数据库,myuser是新的用户名。
postgres=# \c - myuser
Password for user myuser:
postgres=> SELECT user;
current_user
--------------
myuser
(1 row)
# 执行任意SQL语句。
postgres=# SELECT * FROM testtable WHERE i = 2;
i
---
2
(1 row)
# \g 命令会将上一个SQL命令的结果输出到指定文件。
postgres=# \g my_file_for_command_g
postgres=# \! cat my_file_for_command_g
i
---
2
(1 row)
# \g 命令会将上一个SQL命令的结果从管道输出到指定的Shell命令,如cat。
postgres=# \g | cat
i
---
2
(1 row)
# \p 打印上一个SQL命令。
postgres=# \p
SELECT * FROM testtable WHERE i = 2;
# \w 将上一个SQL命令输出到指定的文件。
postgres=# \w my_file_for_option_w
postgres=# \! cat my_file_for_option_w
SELECT * FROM testtable WHERE i = 2;
# \o 和\g相反,该命令会将后面psql命令的输出结果输出到指定的文件,直到遇到下一个独立的\o,
# 此后的命令结果将不再输出到该文件。
postgres=# \o my_file_for_option_o
postgres=# SELECT * FROM testtable WHERE i = 1;
# 终止后面的命令结果也输出到my_file_for_option_o文件中。
postgres=# \o
postgres=# \! cat my_file_for_option_o
i
---
1
(1 row)
输入下面命令
./psql -d postgres -U postgres -c "select * from cmdb_resource_index"
提示错误:
psql: could not connect to server: No such file or directory
Is the server running locally and accepting
connections on Unix domain socket "/tmp/.s.PGSQL.5432"?
原因是端口和ip没有指定,使用默认端口和ip(5432和localhost)导致的,
因此解决方法如下,加上ip和端口号:
./psql -d nms_nmsdb -U postgres -h 10.19.125.197 -p 7017 -c "select * from cmdb_static_bigData"
相关有用的链接是:
https://www.cnblogs.com/louissica/p/10827113.html
问题描述
我安装了包含PostgreSQL 8.4的Bitnami Django stack。
当我运行psql -U postgres
时,我收到以下错误:
psql: could not connect to server: No such file or directory
Is the server running locally and accepting
connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?
PG肯定在运行,pg_hba.conf
文件如下所示:
# TYPE DATABASE USER CIDR-ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all md5
# IPv4 local connections:
host all all 127.0.0.1/32 md5
# IPv6 local connections:
host all all ::1/128 md5
是什么赋予了?
pg正在运行的”Proof”:
root@assaf-desktop:/home/assaf# ps axf | grep postgres
14338 ? S 0:00 /opt/djangostack-1.3-0/postgresql/bin/postgres -D /opt/djangostack-1.3-0/postgresql/data -p 5432
14347 ? Ss 0:00 \_ postgres: writer process
14348 ? Ss 0:00 \_ postgres: wal writer process
14349 ? Ss 0:00 \_ postgres: autovacuum launcher process
14350 ? Ss 0:00 \_ postgres: stats collector process
15139 pts/1 S+ 0:00 \_ grep --color=auto postgres
root@assaf-desktop:/home/assaf# netstat -nltp | grep 5432
tcp 0 0 127.0.0.1:5432 0.0.0.0:* LISTEN 14338/postgres
tcp6 0 0 ::1:5432 :::* LISTEN 14338/postgres
root@assaf-desktop:/home/assaf#
最佳解决方案
此问题来自安装没有版本号的postgres
软件包。虽然将安装postgres
并且它将是正确的版本,但是设置群集的脚本将无法正确运行;这是一个包装问题。
如果您对postgres
感到满意,可以运行一个脚本来创建此集群并运行postgres
。但是,有一种更简单的方法。
首先清除旧的postgres安装。目前的问题在于9.1,所以我假设你已经安装了
sudo apt-get remove --purge postgresql-9.1
现在只需重新安装
sudo apt-get install postgresql-9.1
请注意包名称和版本号。 HTH。
次佳解决方案
错误消息是指Unix-domain套接字,因此您需要调整netstat
调用以不排除它们。所以在没有选项-t
的情况下尝试:
netstat -nlp | grep 5432
我猜想服务器实际上正在侦听套接字/tmp/.s.PGSQL.5432
而不是客户端尝试连接的/var/run/postgresql/.s.PGSQL.5432
。这是在Debian或Ubuntu上使用hand-compiled或third-party PostgreSQL软件包时的典型问题,因为Unix-domain套接字目录的源默认值为/tmp
,但Debian打包将其更改为/var/run/postgresql
。
可能的解决方法:
-
使用third-party软件包提供的客户端(致电
/opt/djangostack-1.3-0/postgresql/bin/psql
)。可能完全卸载Ubuntu-supplied软件包(由于其他反向依赖性,可能很难)。 -
修复third-party包的套接字目录以与Debian /Ubuntu兼容。
-
使用
-H localhost
通过TCP /IP进行连接。 -
使用
-h /tmp
或等效的PGHOST
设置指向正确的目录。 -
不要使用third-party包。
第三种解决方案
您可以使用psql -U postgres -h localhost
强制通过TCP而不是UNIX域套接字进行连接;您的netstat
输出显示PostgreSQL服务器正在侦听localhost的端口5432。
您可以通过使用不同的netstat调用来找出PostgrSQL服务器使用的本地UNIX套接字:
netstat -lp --protocol=unix | grep postgres
无论如何,PostgreSQL服务器侦听的接口都在postgresql.conf
中配置。
第四种方案
只需创建一个这样的软链接:
ln -s /tmp/.s.PGSQL.5432 /var/run/postgresql/.s.PGSQL.5432
第五种方案
这对我有用:
编辑:postgresql.conf
sudo nano /etc/postgresql/9.3/main/postgresql.conf
启用或添加:
listen_addresses = '*'
重启数据库引擎:
sudo service postgresql restart
此外,您可以检查文件pg_hba.conf
sudo nano /etc/postgresql/9.3/main/pg_hba.conf
并添加您的网络或主机地址:
host all all 192.168.1.0/24 md5
第六种方案
我不得不在Debian Squeeze上编译PostgreSQL 8.1,因为我使用的是Project Open,它基于OpenACS,不会在更新版本的PostgreSQL上运行。
默认的编译配置将unix_socket
放在/tmp
中,但是依赖于PostgreSQL的Project Open将无法工作,因为它在/var/run/postgresql
中查找unix_socket
。
postgresql.conf
中有一个设置来设置套接字的位置。我的问题是,我可以设置/tmp
和psql
工作,但不是项目打开,或者我可以设置它为/var/run/postgresql
和psql
不起作用,但项目打开。
该问题的一个解决方案是为/var/run/postgresql
设置套接字,然后根据Peter的建议运行psql
,如下所示:
psql -h /var/run/postgresql
这使用本地权限在本地运行。唯一的缺点是它比简单的”psql”打字更多。
有人提出的另一个建议是在两个地点之间建立一个符号链接。这也有效,但是重启后链接消失了。使用-h参数可能更容易,但是,我在/etc/init.d
中的PostgreSQL脚本中创建了符号链接。我在”start”部分放置了symbolic link create命令。当然,当我发出一个停止并启动或重启命令时,它会尝试重新创建一个现有的符号链接,但除了警告信息之外,可能没有任何损害。
就我而言,而不是:
ln -s /tmp/.s.PGSQL.5432 /var/run/postgresql/.s.PGSQL.5432
我有
ln -s /var/run/postgresql/.s.PGSQL.5432 /tmp/.s.PGSQL.5432
并在postgresql.conf
中明确将unix_socket设置为/var/run/postgresql/.s.PGSQL.5432
。
第七种方案
我通过这样做使它工作:
dpkg-reconfigure locales
选择首选语言环境然后运行
pg_createcluster 9.5 main --start
(9.5是我的postgresql版本)
/etc/init.d/postgresql start
然后它的工作原理!
sudo su - postgres
psql
第八种方案
解:
做这个
export LC_ALL="en_US.UTF-8"
还有这个。 (9.3是我目前的PostgreSQL版本。写下你的版本!)
sudo pg_createcluster 9.3 main --start
第九种方案
在我的情况下,它是由我在编辑/etc/postgresql/9.5/main/pg_hba.conf
时输入的拼写引起的
我变了:
# Database administrative login by Unix domain socket
local all postgres peer
至:
# Database administrative login by Unix domain socket
local all postgres MD5
但是MD5
必须是小写的md5
:
# Database administrative login by Unix domain socket
local all postgres md5
第十种方案
我用postgres-9.5服务器无法解决这个问题。经过3天的零进度尝试在这个和其他网站上的每个修复,我决定re-install服务器,并失去了5天的工作量。但是,我确实在新实例上复制了这个问题。这可能会提供一些关于如何解决它的观点,然后再采取我所做的灾难性方法。
首先,禁用postgresql.conf中的所有日志记录设置。这是部分:
# ERROR REPORTING AND LOGGING
评论该部分中的所有内容。然后重启服务。
重新启动时,使用/etc/init.d/postgresql start
或restart
我发现在重新启动时处于超级用户模式会很有帮助。我打开了一个x-window用于该操作。您可以使用sudo -i
建立超级用户模式。
使用以下简单命令验证是否可以访问服务器:psql -l -U postgres
如果这不能解决问题,请考虑以下事项:
在尝试寻找解决方案时,我正在更改许多文件夹的所有权。我知道我可能会尝试将这些文件夹所有权和chmod
还原2天。如果您已经搞乱了这些文件夹所有权并且不想完全清除服务器,那么请开始跟踪所有受影响文件夹的设置,以使其恢复到原始状态。您可能希望尝试在另一个系统上进行并行安装,并系统地检查所有文件夹的所有权和设置。单调乏味,但您可以访问您的数据。
获得访问权限后,系统地更改postgresql.conf文件的#ERROR REPORTING AND LOGGING部分中的每个相关行。重启并测试。我发现日志的默认文件夹导致失败。我特意评论了log_directory。系统删除日志的默认文件夹是/var /log /postgresql。
参考资料
root@assaf-desktop:/home/assaf# ps axf | grep postgres14338 ? S 0:00 /opt/djangostack-1.3-0/postgresql/bin/postgres -D /opt/djangostack-1.3-0/postgresql/data -p 543214347 ? Ss 0:00 \_postgres: writer process 14348 ? Ss 0:00 \_postgres: wal writer process 14349 ? Ss 0:00 \_postgres: autovacuum launcher process 14350 ? Ss 0:00 \_postgres: stats collector process 15139 pts/1 S+ 0:00 \_ grep --color=auto postgres root@assaf-desktop:/home/assaf# netstat -nltp | grep 5432 tcp 00127.0.0.1:54320.0.0.0:* LISTEN 14338/postgres tcp6 00::1:5432:::* LISTEN 14338/postgres root@assaf-desktop:/home/assaf#
更多推荐
所有评论(0)