PostgreSQL入门

PostgreSQL入门-安装与基本使用(Ubuntu)

PostgreSQL 是一个免费的对象-关系数据库服务器(ORDBMS),号称是 "世界上最先进的开源关系型数据库"。

PostgreSQL 是以加州大学计算机系开发的 POSTGRES 4.2版本为基础的对象关系型数据库。

今天在Ubuntu系统上,我们一起来安装并简单使用一下PostgreSQL数据库。

1.查看当前系统版本:

1$ cat /etc/issue 2Ubuntu 16.04.6 LTS \n \l 3 4$ sudo lsb_release -a 5LSB Version: 6core-9.20160110 7ubuntu0.2-amd64:core-9.20160110 8ubuntu0.2-noarch:security-9.20160110 9ubuntu0.2-amd64:security-9.20160110 10ubuntu0.2-noarch 11Distributor ID: Ubuntu 12Description: Ubuntu 16.04.6 LTS 13Release: 16.04 14Codename: xenial

系统是 Ubuntu 16.04.6 LTS。

2.安装 PostgreSQL

$ sudo apt-get install postgresql

执行实例如下:

1$ sudo apt-get install postgresql 2Reading package lists... Done 3Building dependency tree 4Reading state information... Done 5The following additional packages will be installed: 6 libpq5 7 postgresql-9.5 8 postgresql-client-9.5 9 postgresql-client-common 10 postgresql-common 11 postgresql-contrib-9.5 12 ssl-cert 13 … … 14Creating config file /etc/postgresql-common/createcluster.conf with new version 15Creating config file /etc/logrotate.d/postgresql-common with new version 16Building PostgreSQL dictionaries from installed myspell/hunspell packages... 17Removing obsolete dictionary files: 18Setting up postgresql-9.5 (9.5.19-0ubuntu0.16.04.1) ... 19Creating new cluster 9.5/main ... 20 config /etc/postgresql/9.5/main 21 data /var/lib/postgresql/9.5/main 22 locale en_US.UTF-8 23 socket /var/run/postgresql 24 port 5432 25update-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 26Setting up postgresql (9.5+173ubuntu0.2) ... 27Setting up postgresql-contrib-9.5 (9.5.19-0ubuntu0.16.04.1) ... 28Processing triggers for libc-bin (2.23-0ubuntu11) ... 29Processing triggers for ureadahead (0.100.0-19.1) ... 30Processing triggers for systemd (229-4ubuntu21.21) ...

默认已经安装了 postgresql 的服务器(postgresql-9.5)和客户端(postgresql-client-9.5)。

2019年10月03日,已经发布了PostgreSQL 12,如果想安装最新版的,需要更新一下源,参加 PostgreSQL Apt Repository

可以使用 psql --version 来查看当前安装的版本:

1$ psql --version 2psql (PostgreSQL) 9.5.19

安装后会默认生成一个名为 postgres的数据库和一个名为postgres的数据库用户。

同时还生成了一个名为 postgres 的 Linux 系统用户。

可以使用以下命令查看:

1#查看用户 2$ cat /etc/passwd 3 4#查看用户组 5$ cat /etc/group

3.使用PostgreSQL控制台修改 postgres 数据库用户密码

默认生成的 postgres 的数据库用户没有密码,现在我们使用 postgres Linux用户的身份来登录到管理控制台中。

1# 切换到postgres用户。 2$ sudo su - postgres 3postgres@iZm5e8p54dk31rre6t96xuZ:~$ 4postgres@iZm5e8p54dk31rre6t96xuZ:~$ whoami 5postgres

Linux 用户 postgres 以同名的 postgres 数据库用户的身份登录,不用输入密码的。

1postgres@iZm5e8p54dk31rre6t96xuZ:~$ psql 2psql (9.5.19) 3Type "help" for help. 4 5postgres=#

使用 \password 命令,为 postgres 用户设置一个密码

1postgres=# 2postgres=# CREATE USER db_user WITH PASSWORD 'PWD123456'; 3CREATE ROLE 4postgres=#

创建用户数据库,这里为testdb,并指定所有者为db_user。

1postgres=# CREATE DATABASE testdb OWNER db_user; 2CREATE DATABASE 3postgres=#

将 testdb 数据库的所有权限都赋予 db_user 数据库用户, 否则 db_user 只能登录控制台,没有数据库操作权限。

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

使用 \du 查看当前的数据库用户:

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

最后,使用 \q 命令退出控制台, 并使用 exit 命令退出当前 db_user Linux用户。

1postgres=# \q 2postgres@iZm5e8p54dk31rre6t96xuZ:~$ 3postgres@iZm5e8p54dk31rre6t96xuZ:~$ exit 4logout

4.数据库基本操作实例

创建数据库与删除数据库:

1# 创建数据库 2postgres=# CREATE DATABASE lusiadas; 3CREATE DATABASE 4 5# 删除数据库 6postgres=# DROP DATABASE lusiadas; 7DROP DATABASE

使用 \c 切换数据库:

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

新建表与删除表:

1# 创建一个表 tb_test:(两个字段,其中id 为自增ID) 2testdb=> CREATE TABLE tb_test(id bigserial, name VARCHAR(20)); 3CREATE TABLE 4# 删除一个表 tb_test 5testdb=> DROP table tb_test; 6DROP TABLE

增删改查操作:

1# 创建一个用户表 tb_users(三个字段,其中id 为自增ID) 2testdb=> CREATE TABLE tb_users(id bigserial, age INT DEFAULT 0, name VARCHAR(20)); 3CREATE TABLE 4 5# 使用 INSERT 语句插入数据 6testdb=> INSERT INTO tb_users(name, age) VALUES('张三丰', 212); 7INSERT 0 1 8testdb=> INSERT INTO tb_users(name, age) VALUES('李四光', 83); 9INSERT 0 1 10testdb=> INSERT INTO tb_users(name, age) VALUES('王重阳', 58); 11INSERT 0 1 12 13# 查询数据 14testdb=> select * from tb_users; 15 id | age | name 16----+-----+-------- 17 1 | 212 | 张三丰 18 2 | 83 | 李四光 19 3 | 58 | 王重阳 20(3 rows) 21testdb=> select * from tb_users WHERE id=3; 22 id | age | name 23----+-----+-------- 24 3 | 58 | 王重阳 25(1 row) 26 27# 更新数据 (执行后输出更新的条数,第二次执行失败所以输出为`UPDATE 0`) 28testdb=> UPDATE tb_users set name = '全真派王重阳' WHERE name = '王重阳'; 29UPDATE 1 30testdb=> UPDATE tb_users set name = '全真派王重阳' WHERE name = '王重阳'; 31UPDATE 0 32 33# 插入2条数据 34testdb=> INSERT INTO tb_users(name, age) VALUES('赵四', 0); 35INSERT 0 1 36testdb=> INSERT INTO tb_users(name, age) VALUES('赵五娘', 0); 37INSERT 0 1 38 39# 模糊查询 40testdb=> SELECT * FROM tb_users WHERE name LIKE '赵%'; 41 id | age | name 42----+-----+-------- 43 4 | 0 | 赵五娘 44 5 | 0 | 赵四 45(2 rows) 46 47# 修改表结构: 新增字段 48testdb=# ALTER TABLE tb_users ADD email VARCHAR(50); 49ALTER TABLE 50 51# 修改表结构: 修改字段 52testdb=# ALTER TABLE tb_users ALTER COLUMN email TYPE VARCHAR(100); 53ALTER TABLE 54 55# 删除字段 56testdb=# ALTER TABLE tb_users DROP COLUMN email; 57ALTER TABLE 58 59# 删除记录 60testdb=> DELETE FROM tb_users WHERE id = 5; 61DELETE 1

使用 pg_database_size() 查看数据库的大小:

1testdb=# select pg_database_size('testdb'); 2 pg_database_size 3------------------ 4 7991967 5(1 row) 6testdb=# select pg_size_pretty(pg_database_size('testdb')); 7 pg_size_pretty 8---------------- 9 7805 kB 10(1 row)

5.PostgreSQL 的 timestamp 类型

查询 current_timestamp

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

使用 current_timestamp(0) 定义时间类型精度为0:(有时区)

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

使用 current_timestamp(0) 定义时间类型精度为0:(去掉时区)

1testdb=# select current_timestamp(0)::timestamp without time zone; 2 current_timestamp 3--------------------- 4 2019-11-11 08:31:20 5(1 row) 6 7testdb=# select cast (current_timestamp(0) as timestamp without time zone); 8 current_timestamp 9--------------------- 10 2019-11-11 08:32:26 11(1 row)

时间戳:

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

设置数据库时区:

视图 pg_timezone_names 保存了所有可供选择的时区:

1# 查看时区 2select * from pg_timezone_names;

比如可以选择上海 Asia/Shanghai 或重庆 Asia/Chongqing, 最简单的直接 PRC:

1testdb=# set time zone 'PRC'; 2SET 3testdb=# show time zone; 4 TimeZone 5---------- 6 PRC 7(1 row) 8testdb=# SELECT LOCALTIMESTAMP(0); 9 localtimestamp 10--------------------- 11 2019-11-11 16:42:54 12(1 row)

Reference

https://www.postgresql.org/docs/8.4/sql-altertable.html
http://www.ruanyifeng.com/blog/2013/12/getting_started_with_postgresql.html

[END]

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

PostgreSQL 数组类型使用详解

PostgreSQL数组类型使用详解可能大家对PostgreSQL这个关系型数据库不太熟悉,因为大部分人最熟悉的,公司用的最多的是MySQL我们先对PostgreSQL数据库(下面简称PG)简单的介绍一下,以后有机会,再

PostgreSQL介绍以及如何开发框架中使用PostgreSQL数据库

最近准备下PostgreSQL数据库开发的相关知识,本文把总结的PPT内容通过博客记录分享,本随笔的主要内容是介绍PostgreSQL数据库的基础信息,以及如何在我们的开发框架中使用PostgreSQL数据库,希望大家多多提意见。1、PostgreSQL数据库介绍PostgreSQL是以加州大学伯克利分校计算机系开发的POSTGRES,现在已经更

PostgreSQL简史

现在被称为PostgreSQL的对象关系型数据库管理系统是从加州大学伯克利分校写的POSTGRES软件包发展而来的。经过二十多年的发展,PostgreSQL是世界上可以获得的最先进的开源数据库。2.1.伯克利的POSTGRES项目由MichaelStonebraker教授领导的POSTGRES项目是由防务高级研究项目局(DARPA)、陆军研究办公室(A