使用入门
安装
Ubuntu 下的安装参考 https://www.postgresql.org/download/linux/ubuntu/
安装完毕后默认生成一个 postgres 的数据库和一个名为 postgres 的数据库用户。这里需要注意的是,同时还生成了一个名为 postgres 的 Linux 系统用户。
相关命令
shell 命令
先切换到 postgres 用户:
登录数据库终端命令 psql
,默认进入的是 postgres 数据库,指定用户、数据库和地址端口格式:
\c
,退出 \q
。
postgres@gs-ubuntu:~$ psql
psql (15.3 (Ubuntu 15.3-1.pgdg22.04+1))
Type "help" for help.
postgres=# \c test
You are now connected to database "test" as user "postgres".
test=# \q
postgres@gs-ubuntu:
创建数据库命令:
# 创建数据库
postgres@gs-ubuntu:~$ createdb db1
# 进入数据库
postgres@gs-ubuntu:~$ psql db1
psql (15.3 (Ubuntu 15.3-1.pgdg22.04+1))
Type "help" for help.
db1=#\q
# 删除数据库
postgres@gs-ubuntu:~$ dropdb db1
postgres@gs-ubuntu:~$ psql
psql (15.3 (Ubuntu 15.3-1.pgdg22.04+1))
Type "help" for help.
# 在psql终端创建数据库,和shell下的createdb作用相同
postgres=# create database db1;
CREATE DATABASE
postgres=# drop database db1;
DROP DATABASE
命令行可执行createdb是是SQL命令CREATE DATABASE一个包装器。此命令和SQL命令CREATE DATABASE之间唯一的区别是,前者可以直接在命令行中运行,它允许的注释被添加到数据库中,全部在一个命令。
元命令
登录控制台后 可以使用 psql 提供的丰富的元命令来管理数据库,命令格式是斜杆 \
加上参数。
比如 \?
可以列出元命令的使用格式和命令作用的简要说明,如果忘记命令了就可以用这个来查找。
以下是一些常用元命令:
命令 | 作用 |
---|---|
\l | 列出数据库,相当于 MySQL 的 show databases; |
\c | 进入指定的数据库,比如 \c db1 |
\d | 查询所有表、试图和序列 |
\dt | 查看所有表,相当于 MySQL 的 show tables; |
\dt + 表名 | 查看表大小 |
\db | 显示所有表空间 |
\du | 显示所有用户或角色 |
\dp | 显示表、视图、序列的访问权限 |
\encoding | 查看字符集编码 |
\timing on | 显示执行时长 |
! | 执行shell命令 |
\conninfo | 显示连接信息 |
\password | 修改用户密码 |
\q | 退出psql命令行环境 |
创建新用户和新数据库
使用psql控制台
先添加系统用户,用什么用户登录 psql,创建的表就是属于哪个用户,其他用户没有权限访问,所以要创建一个新的用户而不是用默认的 postgres。
- 创建数据库用户
CREATE USER dbuser WITH PASSWORD ‘password’;
- 创建数据库
CREATE DATABASE exampledb OWNER dbuser;
- 把数据库所有权限赋权给用户
GRANT ALL PRIVILEGES ON DATABASE exampledb to dbuser;
如下例子创建用户 devuser,创建数据库 devdb 并赋权:
$ sudo su - postgres
[sudo] password for nathan:
postgres@gs-ubuntu:~$ psql
psql (15.3 (Ubuntu 15.3-1.pgdg22.04+1))
Type "help" for help.
postgres=# CREATE USER devuser WITH PASSWORD '123';
CREATE ROLE
postgres=# CREATE DATABASE devdb OWNER devuser;
CREATE DATABASE
postgres=# GRANT ALL PRIVILEGES ON DATABASE devdb to devuser;
GRANT
postgres=# \q
postgres@gs-ubuntu:~$ exit
logout
用 devuser 用户登录并创建一个表试试:
$ sudo su - devuser
devuser@gs-ubuntu:~$ psql
psql: error: connection to server on socket "/var/run/postgresql/.s.PGSQL.5432" failed: FATAL: database "devuser" does not exist
devuser@gs-ubuntu:~$ psql devdb
psql (15.3 (Ubuntu 15.3-1.pgdg22.04+1))
Type "help" for help.
# user 是数据库的关键字,不给用,这里用 userinfo 做例子
devdb=> CREATE TABLE userinfo (
id SERIAL PRIMARY KEY,
username VARCHAR(50) NOT NULL,
age INTEGER,
create_date DATE
);
CREATE TABLE
devdb=> \dt
List of relations
Schema | Name | Type | Owner
--------+----------+-------+---------
public | userinfo | table | devuser
(1 row)
devdb=>
远程访问
psql 的配置通常位于 /etc/postgresql/<version>/main/
(Linux)或 C:\Program Files\PostgreSQL\<version>\data\
(Windows)。
编辑配置文件 postgresql.conf
,找到 listen_addresses 配置,设置为*
,代表允许所有 IP 访问。
# ...
# - Connection Settings -
listen_addresses = '*' # what IP address(es) to listen on;
#listen_addresses = 'localhost' # what IP address(es) to listen on;
# comma-separated list of addresses;
# ...
编辑文件 ,加上一行配置,允许远程(type 为 host,本地是 local)使用用户 devuser 访问 devdb 数据库,如果是 all,那就是允许所有用户访问所有数据库(高危操作,一般是本地访问)。
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all peer
# IPv4 local connections:
host all all 127.0.0.1/32 md5
# remote
host devdb devuser 0.0.0.0/0 md5
重启 postgresql 服务才能让修改的配置生效:
现在,在有安装 psql 客户端的远程服务器上就可以使用以下命令访问数据库: