PostgreSQL

PostgreSQL

apt-get install postgresql

Quick Start

Using

安装后默认在系统里添加了一个 "postgres" 用户(Linux 下安装默认该用户被禁用密码登录;Windows 下安装时会提示设置该用户密码)和一个 "postgres" database。

默认监听端口:127.0.0.1:5432/tcp

创建一个“数据库”使用用户:

# su - postgres
$ createdb mydb
$ psql -s mydb
> create user dbuser password '123456';
> GRANT ALL PRIVILEGES ON DATABASE mydb TO dbuser;

然后即可以使用用户名 "dbuser" 和密码 "123456" 连接 localhost 5432 tcp 端口的 "mydb" PostgreSQL 数据库。

Config

允许 Docker 容器访问 host 里的 postgresql

Docker 容器默认使用 172.17.0.0/16 网络。(Linux 里 docker host 的 IP 默认始终是 172.17.0.1)

/etc/postgresql/12/main/postgresql.conf

listen_addresses = 'localhost,172.17.0.1'

/etc/postgresql/12/main/pg_hba.conf (访问权限设置)

host    all             all             172.17.0.0/16           md5
host    replication     all             172.17.0.0/16           md5

更改配置后重启生效

/etc/init.d/postgresql restart
systemctl restart postgresql

Update: 这种方式可能存在的问题:postgresql 必须在 docker 服务以后启动(修改 systemd 里 posgreesql.service 配置加入 After=dockerd.service)。如果开机时 postgresql 服务先启动,那么本机还没有创建 docker 网卡,postgresql 无法监听到 172.17.0.1 上。

或者把 postgresql 改成监听所有地址 listen_addresses = 'localhost,172.17.0.1'

Backup

Backup:

#!/bin/bash

DATE=$(date -u --rfc-3339=date)
export PGPASSWORD="123456"
pg_dump dbname -U dbuser -h localhost -F c > dbname-$DATE.dump

Restore:

export PGPASSWORD="123456"
#  -F c 指定备份文件格式。(默认自动检测)
pg_restore -d dbname -U dbuser -h localhost dbname.dump

CLI

默认 postgres 用户可以直接连接。

su postgres
psql mydb

使用 root 用户连接:

psql -U dbuser -h 127.0.0.1 mydb

psql 里常用命令

\l : 列出数据库
\c mydb : 切换到数据库 mydb
\dt : 列出当前数据库所有表

Drivers

node.js

npm install pg --save

Docs: https://node-postgres.com/
Getting Started: https://node-postgres.com/features/connecting
Sequelize Connection String: postgresql://user:pass@localhost/dbname

傻逼 Java JDBC

Driver: https://mvnrepository.com/artifact/postgresql/postgresql

jdbc:postgresql://host:port/database

可选 Query Params 参数 user, password, ssl 等:

jdbc:postgresql://localhost/test?user=fred&password=secret&ssl=true


Last update: 2020-06-30 05:50:01 UTC