PostgreSQL入門-安裝與基本使用(Ubuntu16)

PostgreSQL入門-安裝與基本使用(Ubuntu)html

PostgreSQL 是一個免費的對象-關係數據庫服務器(ORDBMS),號稱是 "世界上最早進的開源關係型數據庫"。linux

PostgreSQL 是以加州大學計算機系開發的 POSTGRES 4.2版本爲基礎的對象關係型數據庫。sql

今天在Ubuntu系統上,咱們一塊兒來安裝並簡單使用一下PostgreSQL數據庫。數據庫

1.查看當前系統版本:

$ cat /etc/issue
Ubuntu 16.04.6 LTS \n \l

$ sudo lsb_release -a
LSB Version:	
core-9.20160110
ubuntu0.2-amd64:core-9.20160110
ubuntu0.2-noarch:security-9.20160110
ubuntu0.2-amd64:security-9.20160110
ubuntu0.2-noarch
Distributor ID:	Ubuntu
Description:	Ubuntu 16.04.6 LTS
Release:	16.04
Codename:	xenial

系統是 Ubuntu 16.04.6 LTS。ubuntu

2.安裝 PostgreSQL

$ sudo apt-get install postgresql

執行實例以下:服務器

$ sudo apt-get install postgresql
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following additional packages will be installed:
  libpq5 
  postgresql-9.5 
  postgresql-client-9.5 
  postgresql-client-common 
  postgresql-common 
  postgresql-contrib-9.5 
  ssl-cert
 … …
Creating config file /etc/postgresql-common/createcluster.conf with new version
Creating config file /etc/logrotate.d/postgresql-common with new version
Building PostgreSQL dictionaries from installed myspell/hunspell packages...
Removing obsolete dictionary files:
Setting up postgresql-9.5 (9.5.19-0ubuntu0.16.04.1) ...
Creating new cluster 9.5/main ...
  config /etc/postgresql/9.5/main
  data   /var/lib/postgresql/9.5/main
  locale en_US.UTF-8
  socket /var/run/postgresql
  port   5432
update-alternatives: using /usr/share/postgresql/9.5/man/man1/postmaster.1.gz to provide /usr/share/man/man1/postmaster.1.gz (postmaster.1.gz) in auto mode
Setting up postgresql (9.5+173ubuntu0.2) ...
Setting up postgresql-contrib-9.5 (9.5.19-0ubuntu0.16.04.1) ...
Processing triggers for libc-bin (2.23-0ubuntu11) ...
Processing triggers for ureadahead (0.100.0-19.1) ...
Processing triggers for systemd (229-4ubuntu21.21) ...

默認已經安裝了 postgresql 的服務器(postgresql-9.5)和客戶端(postgresql-client-9.5)。socket

2019年10月03日,已經發布了PostgreSQL 12,若是想安裝最新版的,須要更新一下源,參加 PostgreSQL Apt Repositoryide

可使用 psql --version 來查看當前安裝的版本:post

$ psql --version
psql (PostgreSQL) 9.5.19

安裝後會默認生成一個名爲 postgres的數據庫和一個名爲postgres的數據庫用戶。ui

同時還生成了一個名爲 postgres 的 Linux 系統用戶。

可使用如下命令查看:

#查看用戶$ cat /etc/passwd#查看用戶組  $ cat /etc/group

3.使用PostgreSQL控制檯修改 postgres 數據庫用戶密碼

默認生成的 postgres 的數據庫用戶沒有密碼,如今咱們使用 postgres Linux用戶的身份來登陸到管理控制檯中。

# 切換到postgres用戶。$ sudo su - postgres
postgres@iZm5e8p54dk31rre6t96xuZ:~$ 
postgres@iZm5e8p54dk31rre6t96xuZ:~$ whoami
postgres

Linux 用戶 postgres 以同名的 postgres 數據庫用戶的身份登陸,不用輸入密碼的。

postgres@iZm5e8p54dk31rre6t96xuZ:~$ psql
psql (9.5.19)
Type "help" for help.

postgres=#

使用 \password 命令,爲 postgres 用戶設置一個密碼

postgres=# postgres=# CREATE USER db_user WITH PASSWORD 'PWD123456';CREATE ROLE
postgres=#

建立用戶數據庫,這裏爲testdb,並指定全部者爲db_user。

postgres=# CREATE DATABASE testdb OWNER db_user;CREATE DATABASE
postgres=#

將 testdb 數據庫的全部權限都賦予 db_user 數據庫用戶, 不然 db_user 只能登陸控制檯,沒有數據庫操做權限。

postgres=# GRANT ALL PRIVILEGES ON DATABASE testdb TO db_user;GRANT

使用 \du 查看當前的數據庫用戶:

http://m.qd8.com.cn/yiyao/xinxi21_3709996.html

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

最後,使用 \q 命令退出控制檯, 並使用 exit 命令退出當前 db_user Linux用戶。

postgres=# \qpostgres@iZm5e8p54dk31rre6t96xuZ:~$ 
postgres@iZm5e8p54dk31rre6t96xuZ:~$ exitlogout

4.數據庫基本操做實例

建立數據庫與刪除數據庫:

# 建立數據庫
postgres=# CREATE DATABASE lusiadas;CREATE DATABASE# 刪除數據庫
postgres=# DROP DATABASE lusiadas;DROP DATABASE

使用 \c 切換數據庫:

postgres=# CREATE DATABASE testdb;CREATE DATABASEpostgres=# \c testdb;
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, bits: 256, compression: off)
You are now connected to database "testdb" as user "postgres".

新建表與刪除表:

# 建立一個表 tb_test:(兩個字段,其中id 爲自增ID)
testdb=> CREATE TABLE tb_test(id bigserial, name VARCHAR(20));CREATE TABLE# 刪除一個表 tb_test
testdb=> DROP table tb_test;DROP TABLE

增刪改查操做:

# 建立一個用戶表 tb_users(三個字段,其中id 爲自增ID)
testdb=> CREATE TABLE tb_users(id bigserial, age INT DEFAULT 0, name VARCHAR(20));CREATE TABLE
 # 使用 INSERT 語句插入數據 
testdb=> INSERT INTO tb_users(name, age) VALUES('張三丰', 212);INSERT 0 1testdb=> INSERT INTO tb_users(name, age) VALUES('李四光', 83);INSERT 0 1testdb=> INSERT INTO tb_users(name, age) VALUES('王重陽', 58);INSERT 0 1# 查詢數據
testdb=> select * from tb_users;
 id | age |  name  
----+-----+--------
  1 | 212 | 張三丰
  2 |  83 | 李四光
  3 |  58 | 王重陽
(3 rows)
testdb=> select * from tb_users WHERE id=3;
 id | age |  name  
----+-----+--------
  3 |  58 | 王重陽
(1 row)

# 更新數據 (執行後輸出更新的條數,第二次執行失敗因此輸出爲`UPDATE 0`)
testdb=> UPDATE tb_users set name = '全真派王重陽' WHERE name = '王重陽';
UPDATE 1
testdb=> UPDATE tb_users set name = '全真派王重陽' WHERE name = '王重陽';
UPDATE 0

# 插入2條數據
testdb=> INSERT INTO tb_users(name, age) VALUES('趙四', 0);
INSERT 0 1
testdb=> INSERT INTO tb_users(name, age) VALUES('趙五娘', 0);
INSERT 0 1

# 模糊查詢
testdb=> SELECT * FROM tb_users WHERE name LIKE '趙%';
 id | age |  name  
----+-----+--------
  4 |   0 | 趙五娘
  5 |   0 | 趙四
(2 rows)

# 修改表結構: 新增字段 
testdb=# ALTER TABLE tb_users ADD email VARCHAR(50);
ALTER TABLE

# 修改表結構: 修改字段 
testdb=# ALTER TABLE tb_users ALTER COLUMN email TYPE VARCHAR(100);
ALTER TABLE

# 刪除字段
testdb=# ALTER TABLE tb_users DROP COLUMN email;
ALTER TABLE

# 刪除記錄
testdb=> DELETE FROM tb_users WHERE id = 5;
DELETE 1

使用 pg_database_size() 查看數據庫的大小:

testdb=# select pg_database_size('testdb');
 pg_database_size 
------------------
          7991967
(1 row)
testdb=# select pg_size_pretty(pg_database_size('testdb'));
 pg_size_pretty 
----------------
 7805 kB
(1 row)

5.PostgreSQL 的 timestamp 類型

查詢 current_timestamp

testdb=# select current_timestamp;
       current_timestamp       
-------------------------------
 2019-11-11 08:33:35.369887+00
(1 row)

使用 current_timestamp(0) 定義時間類型精度爲0:(有時區)

testdb=# select current_timestamp(0);
   current_timestamp    
------------------------
 2019-11-11 08:31:08+00
(1 row)

使用 current_timestamp(0) 定義時間類型精度爲0:(去掉時區)   焦做國醫堂胃腸醫院好很差:http://jz.lieju.com/zhuankeyiyuan/37175212.htm

testdb=# select current_timestamp(0)::timestamp without time zone;
  current_timestamp  
---------------------
 2019-11-11 08:31:20
(1 row)

testdb=# select cast (current_timestamp(0) as  timestamp without time zone);
  current_timestamp  
---------------------
 2019-11-11 08:32:26
(1 row)

時間戳:

testdb=# select extract(epoch from now());
    date_part     
------------------
 1573461495.47821
(1 row)

設置數據庫時區:

視圖 pg_timezone_names 保存了全部可供選擇的時區:

# 查看時區  select * from pg_timezone_names;

好比能夠選擇上海 Asia/Shanghai 或重慶 Asia/Chongqing, 最簡單的直接 PRC:

testdb=# set time zone 'PRC'; SET
testdb=# show time zone;
 TimeZone 
----------
 PRC
(1 row)
testdb=# SELECT LOCALTIMESTAMP(0);
   localtimestamp    
---------------------
 2019-11-11 16:42:54
(1 row)
相關文章
相關標籤/搜索