Skip to content

使用入门

安装

Ubuntu 下的安装参考 https://www.postgresql.org/download/linux/ubuntu/

安装完毕后默认生成一个 postgres 的数据库和一个名为 postgres 的数据库用户。这里需要注意的是,同时还生成了一个名为 postgres 的 Linux 系统用户。

相关命令

shell 命令

先切换到 postgres 用户:

sudo su - postgres

登录数据库终端命令 psql,默认进入的是 postgres 数据库,指定用户、数据库和地址端口格式:

psql -U your_username -d your_database_name -h localhost -p 5432
切换数据库用 \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。

sudo adduser devuser

  • 创建数据库用户 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 服务才能让修改的配置生效:

sudo systemctl restart postgresql

现在,在有安装 psql 客户端的远程服务器上就可以使用以下命令访问数据库:

psql -U devuser -d devdb -h 192.168.0.100 -p 5432