linux下安装postgresql postgis - cytggit/Map-openlayers GitHub Wiki

  • 安装:

rpm -Uvh https://yum.postgresql.org/9.6/redhat/rhel-7.2-x86_64/pgdg-centos96-9.6-3.noarch.rpm

yum update

yum -y install epel-release

yum install postgresql96-server postgresql96-contrib postgis2_96

  • 初始化:

service postgresql-9.6 initdb

chkconfig postgresql-9.6 on service postgresql-9.6 start

service postgresql-9.6 restart

或者:

(systemctl enable postgresql-9.6)

(/usr/pgsql-9.6/bin/postgresql96-setup initdb (service postgresql initdb)

(systemctl start postgresql-9.6)

  • 远程访问(防火墙设置):

setup打开5432的tcp(默认5432,可以不执行)

vim /etc/sysconfig/iptables

-A INPUT -m tcp -p tcp --dport 5432 -j ACCEPT

service iptables restart

或者:

(firewall-cmd --permanent --add-port=5432/tcp)

(firewall-cmd --permanent --add-port=80/tcp)

(firewall-cmd --reload )

      (systemctl stop firewalld.service   关闭firewalld防火墙)

vi /var/lib/pgsql/9.6/data/pg_hba.conf

在该配置文件的host all all 127.0.0.1/32 md5行下添加以下配置,或者直接将这一行修改为以下配置

host all all 0.0.0.0/0 md5(或者trust)

vi /var/lib/pgsql/9.6/data/postgresql.conf

将该文件中的listen_addresses项值设定为“”,在9.0 Windows版中,该项配置已经是“”无需修改。 port取消注释。

service postgresql-9.6 restart (systemctl restart postgresql-9.6 )

  • 修改初始密码

sudo -u postgres psql

ALTER USER postgres WITH PASSWORD 'postgres';

退出命令:\q

service postgresql-9.6 restart

  • 创建数据库&添加扩展

su postgres

createdb testdb

psql -d testdb -U postgres

create extension hstore;

create extension postgis;

\q & exit

  • 误删lock文件

一般解决办法:

1)

psql -h 127.0.0.1

2)

pg_ctl stop -m fast -D $PGDATA

pg_ctl start -D $PGDATA

报错解决:

FATAL: could not open lock file "/tmp/.s.PGSQL.5432.lock": Permission denied

可能是lock文件默认在/tmp下,但是tmp没有访问权限,更改lock文件的生成路径(postgresql.conf)

  • 数据库备份和还原(命令)

备份:

pg_dump --host ip --port 5432 --username "postgres" --role "postgres" --format tar --blobs --section pre-data --section data --section post-data --encoding UTF8 --inserts --column-inserts --verbose --file './moteDB20170720.backup' 'mote_basemap'

还原:

pg_restore ...

  • 忘记用户密码

修改pg_hba.conf中的MD5为trust,重启postgresql,无密码登录后修改新密码,再把pg_hba.conf的MD5改回来

  • 多数据库多表连接查询

1、create extension dblink;

2、例子(INSERT):

  INSERT INTO point SELECT
	A."name",
	A.geom
  FROM
dblink (
	'host=127.0.0.1 dbname=test user=postgres password=postgres',
	'SELECT "name",geom from point'
) AS A (
	"name" TEXT,
	"geom" geometry (Point, 4326),
);
  • 存在多个pg报错

报错:

psql: symbol lookup error: psql: undefined symbol: PQsetErrorContextVisibility

解决:

  ldd psql | grep libpq
  mv /lib64/libpq.so.5 /lib64/libpq.so.5.bak
  ln -sfn /usr/local/postgresql/lib/libpq.so.5 /lib64/libpq.so.5