只需要一个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
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 PostgreSQL 手册里对于psql有非常详细的介绍,不过一般来说我们是用不到那么多参数的。
psql -h
如果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在退出时并不是使用exit
,而是使用\q
,接着按下回车就行了。
这里的q指的是quit。
\password:设置密码
\q:退出
\h:查看SQL命令的解释,比如\h select。
\?:查看psql命令列表。
\l:列出所有数据库。
\c [database_name]:连接其他数据库。
\d:列出当前数据库的所有表格。
\d [table_name]:列出某一张表格的结构。
\du:列出所有用户。
\e:打开文本编辑器。
\conninfo:列出当前数据库和连接的信息。
创建用户"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 | {}
安装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;
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 启动成功后,再在远程连接
常用操作连接