Linux 上安装 PostgreSQL
打开 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 用户 具有建库权限,建角色权限,拥有创建、修改、删除角色 已经登录权限
2、创建具有超级权限的用户:admin
删除用户
一般情况下直接执行 drop role xxx; 就可以把这个用户删除。但是很多时候会因为用户有依赖而报错。 权限依赖
- postgres=# create role test with login;
- CREATE ROLE
- postgres=# grant all on database postgres to test;
- GRANT
- postgres=# drop role test;
- ERROR: role "test" cannot be dropped because some objects depend on it
- DETAIL: privileges for database postgres
可以看出,因为我们把数据库postgres 的权限赋予了test 用户,所以直接删除的时候会报错。面对这种情况,我们需要先将role 的权限所有的权限全部revoke 掉,如下:
- postgres=# revoke all on database postgres from test;
- REVOKE
- postgres=# drop role test;
- DROP ROLE
注意:需要把该用户在所有数据库具有权限的所有数据库对象的(表,视图,SEQUENCE)权限全部回收,才能删除该用户。 对象依赖
- postgres=# create role test with login;
- CREATE ROLE
- postgres=# \c – test
- You are now connected to database "postgres" as user "test".
- postgres=> create table test (id int);
- CREATE TABLE
- postgres=# \c – postgres
- You are now connected to database "postgres" as user "postgres".
- postgres=# drop role test;
- ERROR: role "test" cannot be dropped because some objects depend on it
- DETAIL: owner of table test
可以看出,因为test 用户是test 表的owner,所以删除的时候报错owner of table test。如果不需要保留该对象,则需要先把该依赖对象删除。如果需要保留该对象,则应该在删除之前先把owner 赋予别人,如下:
- postgres=# alter table test OWNER TO postgres;
- ALTER TABLE
- postgres=# drop role test;
- DROP ROLE
注意:需要把该用户在所有数据库具有owner 权限的所有数据库对象(表,视图,SEQUENCE)删除或者执行alter xx owner to,才能删除该用户。 更牛逼的方法 如果不保留owner 的数据库对象
- postgres=# REASSIGN OWNED BY test TO postgres;
- REASSIGN OWNED
- postgres=# DROP OWNED BY test;
- DROP OWNED
- postgres=# drop role test;
- DROP ROLE
如果保留owner 的数据库对象
- postgres=# REASSIGN OWNED BY test TO postgres;
- REASSIGN OWNED
- postgres=# drop role test;
- 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