在Ubuntu 16.04上安装使用PostgreSQL

一、准备工作

只需要一个Ubuntu 16.04服务器,且可以运行访问具有sudo特权的帐户。有了这两个必要条件,让我们开始安装PostgreSQL吧。

二、开始安装

安装数据库很简单。我们要做的第一件事是更新和升级。请记住,如果内核升级,将重新启动服务器。为此,可以将其推迟到可以重新启动服务器的时候。

要更新/升级,请打开终端窗口并输入以下命令:

sudo apt-get update

sudo apt-get upgrade

升级完成后,就该安装了。从同一终端窗口发出以下命令:

sudo apt-get install postgresql postgresql-contrib

安装完成后,无需设置管理员密码。PostgreSQL使用一个名为“role”的概念进行身份验证,不区分用户和组。PostgreSQL角色与Linux系统帐户匹配。如果存在PostgreSQL角色,则需要存在同名的用户帐户。换句话说,如果有一个名为postgres的角色,则需要有一个名为postgres的用户帐户。通过这样的帐户,我们可以访问PostgreSQL。

登录Postgres账户:

sudo su postgres

接着使用createuser 命令创建一个PostgreSQL 账号:
createuser --interactive

postgres@xx$ createuser --interactive
Enter name of role to add: marcoboni
Shall the new role be a superuser? (y/n) y

 

最后, 还需要使用create db 命令创建以你的账号名字命名的数据库:
createdb -e    //createdb --help   

psql 回车

postgres=#

postgres=# \du
                                   List of roles
 Role name |                         Attributes                         | Member of 
-----------+------------------------------------------------------------+-----------
 marcoboni | Superuser, Create role, Create DB                          | {}
 postgres  | Superuser, Create role, Create DB, Replication, Bypass RLS | {}

psql连接数据库

在psql PostgreSQL 手册里对于psql有非常详细的介绍,不过一般来说我们是用不到那么多参数的。

psql -h -p -d -u

如果host是localhost,可以不指定该参数,当不指定端口号时会使用默认的端口号5432,或者你可以通过-p来指定其他端口号。

比如你想连接本地的dbtest:5432,用户名是postgres,可以使用如下的命令:

psql -d test -u postgres

如果有密码的话还需要输入密码,连接数据库后就可以直接通过sql语句来进行相关的操作了

创建数据库以及列出所有数据库

postgres=# createdb chitchat

postgres-# \l

见下表

切换数据库

postgres-# \c chitchat

You are now connected to database "chitchat" as user "postgres".

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

chitchat-# \d

No relations found.

退出psql

和其他的命令行工具不一样,psql在退出时并不是使用exit,而是使用\q,接着按下回车就行了。
这里的q指的是quit。

 

\password:设置密码
\q:退出
\h:查看SQL命令的解释,比如\h select。
\?:查看psql命令列表。
\l:列出所有数据库。
\c [database_name]:连接其他数据库。
\d:列出当前数据库的所有表格。
\d [table_name]:列出某一张表格的结构。
\du:列出所有用户。
\e:打开文本编辑器。
\conninfo:列出当前数据库和连接的信息。

添加新用户和新数据库/删除

法一:使用PostgreSQL客户端psql

创建用户"marco"并设置密码:

postgres=# create user marco with password '123456';

显示用户 \du

chitchat-# \du
                                   List of roles
 Role name |                         Attributes                         | Member of 
-----------+------------------------------------------------------------+-----------
 marco     |                                                            | {}
 marco1    | Superuser, Create role, Create DB                          | {}
 postgres  | Superuser, Create role, Create DB, Replication, Bypass RLS | {}
 root      | Superuser                                                  | {}
postgres@localhost:~$ dropuser -e -i marco1
Role "marco1" will be permanently removed.
Are you sure? (y/n) y
SELECT pg_catalog.set_config('search_path', '', false)
DROP ROLE marco1;
postgres=# drop role marco;
DROP ROLE

创建数据库exampledb,所有者为marco:

postgres=# create database exampledb owner marco;

将exampledb数据库的所有权限赋予marco,否则xiaozhang只能登录psql,没有任何数据库操作权限:

grant all privileges on database exampledb to marco;
postgres=# create database exampledb owner marco;
CREATE DATABASE
postgres=# grant all privileges on database exampledb to marco
postgres-# \l
                                  List of databases
   Name    |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges   
-----------+----------+----------+-------------+-------------+-----------------------
 chitchat  | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
 exampledb | marco    | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
 postgres  | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
 template0 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
 template1 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
(5 rows)

postgres=# drop database exampledb;
DROP DATABASE
postgres=# \l
                                  List of databases
   Name    |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges   
-----------+----------+----------+-------------+-------------+-----------------------
 chitchat  | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =Tc/postgres         +
           |          |          |             |             | postgres=CTc/postgres+
           |          |          |             |             | root=CTc/postgres
 postgres  | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
 template0 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
 template1 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
(4 rows)

删除用户:

删除一个PostgreSQL用户帐户,需要说明的是只有超级用户或带有CREATEROLE权限的用户可以执行该命令,如果要删除超级用户,只能通过超级用户的身份执行该命令。该命令的使用方式如下:
    dropuser [option...] [username]
    1. 命令行选项列表:

选项
说明
-e(--echo)
回显dropuser生成的命令并且把它发送到服务器。
-i(--interactive)
在做任何破坏性动作前提示。
-h(--host=host)
指定PostgreSQL服务器的主机名。
-p(--port=port)
指定服务器的监听端口,如不指定,则为缺省的5432。
-U(--username=username)
本次操作的登录用户名。
-w(--no-password)
如果当前登录用户没有密码,可以指定该选项直接登录。

 

postgres@localhost:~$ dropuser -e -i marco1
Role "marco1" will be permanently removed.
Are you sure? (y/n) y
SELECT pg_catalog.set_config('search_path', '', false)
DROP ROLE marco1;

验证:

postgres@localhost:~$ psql 
psql (9.5.16)
Type "help" for help.

postgres=# \du
                                   List of roles
 Role name |                         Attributes                         | Member of 
-----------+------------------------------------------------------------+-----------
 postgres  | Superuser, Create role, Create DB, Replication, Bypass RLS | {}
 root      | Superuser                                                  | {}

 

法二:使用shell命令行

安装PostgreSQL后提供了createuser和createdb命令行程序。

首先创建数据库用户"xiaozhang1",并指定为超级用户:

sudo -u postgres createuser --superuser marco1;

然后在shell命令行下创建数据库并指定所有者
sudo -u postgres createdb -O marco1 exampledb1;

# 创建新表 
CREATE TABLE user_tbl(name VARCHAR(20), signup_date DATE);
# 插入数据 
INSERT INTO user_tbl(name, signup_date) 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 user_tbl ALTER COLUMN signup_date SET NOT NULL;
# 更名栏位 
ALTER TABLE user_tbl RENAME COLUMN signup_date TO signup;
# 删除栏位 
ALTER TABLE user_tbl DROP COLUMN email;
# 表格更名 
ALTER TABLE user_tbl RENAME TO backup_tbl;
# 删除表格 
DROP TABLE IF EXISTS backup_tbl;

postgresql数据库查询当前数据库、当前用户

1.查询当前数据库:

终端:\c

sql语句:select current_database();

2.查询当前用户:

终端:\c

sql语句:select user;  或者:select current_user;

chitchat-# \c
You are now connected to database "chitchat" as user "postgres".
linux版的postgresql默认无法直接远程访问其数据库
因此,需要修改postgreSQL数据库配置来实现远程访问。
具体操作如下:
使用find / -name postgresql.conf找到 postgresql.conf
在最后添加用户参数:
listen_address = ‘*’,注意不要被注释掉
启用密码验证
#password_encryption = on 修改为 password_encryption = on
修改pg_hba.conf文件的内容:
可访问的用户ip段
在文件末尾加入:host  all  all  10.29.127.0/24  trust
重启postgreSQL数据库:
systemctl restart postgresql
启动成功后,再在远程连接

 

常用操作连接

 

 

你可能感兴趣的:(数据库)