PostgreSQL入門-安裝與基本使用(Ubuntu)html
PostgreSQL 是一個免費的對象-關係數據庫服務器(ORDBMS),號稱是 "世界上最早進的開源關係型數據庫"。linux
PostgreSQL 是以加州大學計算機系開發的 POSTGRES 4.2版本爲基礎的對象關係型數據庫。sql
今天在Ubuntu系統上,咱們一塊兒來安裝並簡單使用一下PostgreSQL數據庫。數據庫
$ 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
$ 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
默認生成的 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
建立數據庫與刪除數據庫:
# 建立數據庫 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)
查詢 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)