Linux 上安装 PostgreSQL

2020年4月16日

打开 PostgreSQL 官网 https://www.postgresql.org/,点击菜单栏上的 Download ,可以看到这里包含了很多平台的安装包,包括 Linux、Windows、Mac OS等 。

Linux 我们可以看到支持 Ubuntu 和 Red Hat 等各个平台,点击具体的平台链接,即可查看安装方法:

点击上图中的 file browser,我们还能下载 PostgreSQL 最新的源码。

本章节以 Ubuntu 为例。

Ubuntu 安装 PostgreSQL

Ubuntu 可以使用 apt-get 安装 PostgreSQL:

sudo apt-get update
sudo apt-get install postgresql postgresql-client

安装完毕后,系统会创建一个数据库超级用户 postgres,密码为空。

#  sudo -i -u postgres

这时使用以下命令进入 postgres,输出以下信息,说明安装成功:

~$ psql
psql (9.5.17)
Type "help" for help.

postgres=# 

输入以下命令退出 PostgreSQL 提示符:

\q

PostgreSQL 安装完成后默认是已经启动的,但是也可以通过下面的方式来手动启动服务。

sudo /etc/init.d/postgresql start   # 开启
sudo /etc/init.d/postgresql stop    # 关闭
sudo /etc/init.d/postgresql restart # 重启

 

控制台命令

 
除了前面已经用到的\password命令(设置密码)和\q命令(退出)以外,控制台还提供一系列其他命令。

\h:查看SQL命令的解释,比如\h select。

\?:查看psql命令列表。

\l:列出所有数据库。

\c [database_name]:连接其他数据库。

\d:列出当前数据库的所有表格。

\d [table_name]:列出某一张表格的结构。

\du:列出所有用户。

\e:打开文本编辑器。

\conninfo:列出当前数据库和连接的信息。

基本的数据库操作,就是使用一般的SQL语言:

# 创建新表

CREATE TABLE usertbl(name VARCHAR(20), signupdate DATE);

# 插入数据

INSERT INTO usertbl(name, signupdate) VALUES('张三', '2013-12-22');

# 选择记录

SELECT * FROM user_tbl;

# 更新数据

UPDATE user_tbl set name = '李四' WHERE name = '张三';

# 删除记录

DELETE FROM user_tbl WHERE name = '李四' ;

# 添加栏位

ALTER TABLE user_tbl ADD email VARCHAR(40);

# 更新结构

ALTER TABLE usertbl ALTER COLUMN signupdate SET NOT NULL;

# 更名栏位

ALTER TABLE usertbl RENAME COLUMN signupdate TO signup;

# 删除栏位

ALTER TABLE user_tbl DROP COLUMN email;

# 表格更名 

ALTER TABLE usertbl RENAME TO backuptbl;

# 删除表格
DROP TABLE IF EXISTS backup_tbl;

# 创建数据库新用户,如 testdb:
postgres=# create user testdb with password '123123';;

# 将testdb数据库的所有权限都赋予testdb:
GRANT ALL PRIVILEGES ON DATABASE testdb TO testdb;;

## 授予用户数据库权限 
GRANT ALL PRIVILEGES ON DATABASE 数据库名 TO 用户名;

# 授予用户查看刚授权的数据库的里面的表的权限

GRANT ALL PRIVILEGES ON TABLE 表名  TO 用户名;

 

创建用户 【ROLE 默认不具有登录权限 需要创建的时候 加上 LOGIN 表示允许登录】

1 、创建一个baron 用户 具有建库权限,建角色权限,拥有创建、修改、删除角色 已经登录权限

CREATE ROLE baron WITH PASSWORD 'wxzs123123' CREATEDB CREATEROLE LOGIN;

2、创建具有超级权限的用户:admin

postgres=# CREATE ROLE admin WITH SUPERUSER LOGIN PASSWORD 'admin';

删除用户

一般情况下直接执行 drop role xxx; 就可以把这个用户删除。但是很多时候会因为用户有依赖而报错。 权限依赖

  1. postgres=# create role test with login;
  2. CREATE ROLE
  3. postgres=# grant all on database postgres to test;
  4. GRANT
  5. postgres=# drop role test;
  6. ERROR: role "test" cannot be dropped because some objects depend on it
  7. DETAIL: privileges for database postgres

可以看出,因为我们把数据库postgres 的权限赋予了test 用户,所以直接删除的时候会报错。面对这种情况,我们需要先将role 的权限所有的权限全部revoke 掉,如下:

  1. postgres=# revoke all on database postgres from test;
  2. REVOKE
  3. postgres=# drop role test;
  4. DROP ROLE

注意:需要把该用户在所有数据库具有权限的所有数据库对象的(表,视图,SEQUENCE)权限全部回收,才能删除该用户。 对象依赖

  1. postgres=# create role test with login;
  2. CREATE ROLE
  3. postgres=# \c - test
  4. You are now connected to database "postgres" as user "test".
  5. postgres=> create table test (id int);
  6. CREATE TABLE
  7. postgres=# \c - postgres
  8. You are now connected to database "postgres" as user "postgres".
  9. postgres=# drop role test;
  10. ERROR: role "test" cannot be dropped because some objects depend on it
  11. DETAIL: owner of table test

可以看出,因为test 用户是test 表的owner,所以删除的时候报错owner of table test。如果不需要保留该对象,则需要先把该依赖对象删除。如果需要保留该对象,则应该在删除之前先把owner 赋予别人,如下:

  1. postgres=# alter table test OWNER TO postgres;
  2. ALTER TABLE
  3. postgres=# drop role test;
  4. DROP ROLE

注意:需要把该用户在所有数据库具有owner 权限的所有数据库对象(表,视图,SEQUENCE)删除或者执行alter xx owner to,才能删除该用户。 更牛逼的方法 如果不保留owner 的数据库对象

  1. postgres=# REASSIGN OWNED BY test TO postgres;
  2. REASSIGN OWNED
  3. postgres=# DROP OWNED BY test;
  4. DROP OWNED
  5. postgres=# drop role test;
  6. DROP ROLE

如果保留owner 的数据库对象

  1. postgres=# REASSIGN OWNED BY test TO postgres;
  2. REASSIGN OWNED
  3. postgres=# drop role test;
  4. DROP ROLE

使用参考:https://www.runoob.com/postgresql/linux-install-postgresql.html

http://www.postgres.cn/docs/11/

https://blog.csdn.net/qq_40907977/article/details/102837411

https://blog.csdn.net/zhangwenjiezw886/article/details/89956005

没有评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注