您当前的位置: 首页 >  sql

暂无认证

  • 0浏览

    0关注

    92582博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

数据库:PostgreSQL:基础功能使用介绍

发布时间:2020-08-30 18:51:50 ,浏览量:0

在这里插入图片描述 作为传统开源数据库的坚定支持者,PostgreSQL在数据库领域中一直有不错的名声,在TOP DB index指数中也基本上是在第五的位置。由于考虑到Oracle、MySQL和SQL Server常年居于前三,加之Microsoft Access借助Office的背景也一直有不错的背景,第五的位置的争夺其实才是相对有看头的,PostgreSQL在这种情况之下,在MongoDB和Firebase的追赶下还能保住第五已经是很不错。这篇文章来介绍一下PostgreSQL的基础功能和使用介绍。

TOP DB index

从2020年8月份的TOP DB index的表现可以看到,前四名虽然暂时稳不可破,但是持续不停的下跌已经是目前的趋势,如没有特殊的事件或者技术出现,这个趋势应该会持续下去。前5名都是传统的关系型数据库,所以在这个整体下降的趋势背景之下,第5的PostgreSQL的稳定上升更显得尤为可贵。至于Firebase能够继续上升取代PostgreSQL的位置还只能是继续观望,但是作为传统的关系型数据库,PostgreSQL已经成为重要的选择项之一,或者说是MySQL与PostgreSQL二选一。 在这里插入图片描述

概要介绍 项目 内容 官网 postgresql.org License PostgreSQL License 开源/闭源 开源 推出时间 1996/07/08 目前最新稳定版本 12.4 代码仓库 https://git.postgresql.org/gitweb/?p=postgresql.git 编写语言 C 支持平台 FreeBSD、 Linux、 macOS,、OpenBSD以及Windows 安装配置

PostgreSQl有多种安装方式,本文使用最为简单的容器化方式。

步骤1: docker pull

拉取官方镜像,官方镜像分普通版和alpine版,这里为了镜像尺寸小一点,选取拉取PostgreSQL 13的alpine版。

执行命令:docker pull postgres:12.4-alpine

liumiaocn:~ liumiao$ docker pull postgres:12.4-alpine
12.4-alpine: Pulling from library/postgres
...省略
Digest: sha256:b05c3311616d0d798225524e351423efa01dd3e5e6b56b2cca96a64d8fd4e746
Status: Downloaded newer image for postgres:12.4-alpine
docker.io/library/postgres:12.4-alpine
liumiaocn:~ liumiao$ docker images |grep 12.4-alpine
postgres                                                             12.4-alpine                     3781fe35c6b8        2 weeks ago         157MB
liumiaocn:~ liumiao$
启动镜像

执行如下命令,即可将步骤1中拉取的PostgreSQL 12.4版本的数据库服务启动起来。

执行命令:docker run --name postgres -v ${HOME}/data:/var/lib/postgresql/data -e POSTGRES_PASSWORD=liuiaocn -d postgres:12.4-alpine

上述命令启动了如下的数据库服务:

项目 说明 PostgreSQL的版本 为12.4 容器名称 postgres 数据库密码 liumiaocn 数据卷挂载目录 data
liumiaocn:postgres liumiao$ docker run --name postgres -v ${HOME}/data:/var/lib/postgresql/data -e POSTGRES_PASSWORD=liuiaocn -d postgres:12.4-alpine
a06874369dbfeff4b4a6f63d1410c566cdfc411f410126746d68a6b0b4e927c2
liumiaocn:postgres liumiao$ docker ps
CONTAINER ID        IMAGE                  COMMAND                  CREATED             STATUS              PORTS               NAMES
a06874369dbf        postgres:12.4-alpine   "docker-entrypoint.s…"   2 seconds ago       Up 1 second         5432/tcp            postgres
liumiaocn:postgres liumiao$
进入容器
liumiaocn:postgres liumiao$ docker exec -it postgres sh
/ # hostname
a06874369dbf
/ # which psql
/usr/local/bin/psql
/ #
版本确认

可以通过内置的环境变量确认

/ # env |grep VERSION
PG_VERSION=12.4
/ #

也可以通过内置的psql确认客户端版本

/ # psql --version
psql (PostgreSQL) 12.4
/ #

或者通过show命令确认(连接之后才能使用,注意提示符)

postgres=# show server_version_num; server_version_num -------------------- 120004 (1 row) postgres=# 

或者使用SELECT语句

postgres=# SELECT current_setting('server_version_num'); current_setting ----------------- 120004 (1 row) postgres=#  

或者使用select version()语句

postgres=# select version(); version --------------------------------------------------------------------------------------- PostgreSQL 12.4 on x86_64-pc-linux-musl, compiled by gcc (Alpine 9.3.0) 9.3.0, 64-bit (1 row) postgres=#  
连接数据库

上述方式生成的数据库,缺省的数据库用户名为postgres,可以使用-U选项进行连接

/ # psql -U postgres psql (12.4) Type "help" for help. postgres=# 

查询当前用户信息可以使用如下select语句

postgres=# select * from current_user; current_user -------------- postgres (1 row) postgres=# 

也可以使用简化语句select user

postgres=# select user; user ---------- postgres (1 row) postgres=#  
查看版权信息
postgres=# \copyright PostgreSQL Database Management System (formerly known as Postgres, then as Postgres95) Portions Copyright (c) 1996-2019, PostgreSQL Global Development Group Portions Copyright (c) 1994, The Regents of the University of California

Permission to use, copy, modify, and distribute this software and its
documentation for any purpose, without fee, and without a written agreement is hereby granted, provided that the above copyright notice and this
paragraph and the following two paragraphs appear in all copies. IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING
LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS
DOCUMENTATION, EVEN IF THE UNIVERSITY OF CALIFORNIA HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE. THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. postgres=#  
查看已创建的数据库
/ # psql -U postgres psql (12.4) Type "help" for help. postgres=# \l List of databases Name | Owner | Encoding | Collate | Ctype | Access privileges -----------+----------+----------+------------+------------+----------------------- postgres | postgres | UTF8 | en_US.utf8 | en_US.utf8 | template0 | postgres | UTF8 | en_US.utf8 | en_US.utf8 | =c/postgres + | | | | | postgres=CTc/postgres
 template1 | postgres | UTF8 | en_US.utf8 | en_US.utf8 | =c/postgres + | | | | | postgres=CTc/postgres (3 rows) postgres=# 
创建数据库

使用create database test创建名为test的数据库

postgres=# create database test; CREATE DATABASE postgres=# \l List of databases Name | Owner | Encoding | Collate | Ctype | Access privileges -----------+----------+----------+------------+------------+----------------------- postgres | postgres | UTF8 | en_US.utf8 | en_US.utf8 | template0 | postgres | UTF8 | en_US.utf8 | en_US.utf8 | =c/postgres + | | | | | postgres=CTc/postgres
 template1 | postgres | UTF8 | en_US.utf8 | en_US.utf8 | =c/postgres + | | | | | postgres=CTc/postgres
 test | postgres | UTF8 | en_US.utf8 | en_US.utf8 | (4 rows) postgres=#  
连接数据库

使用\c 数据库名 命令去连接所指定的数据库,比如\c test,将会连接刚刚创建的test数据库,在连接之后的操作比如创建表,在没有指明数据库名的情况下均对于当前所连接的数据库起作用。

postgres=# \c test You are now connected to database "test" as user "postgres". test=#  
基本操作 版本确认

虽然psql --version也可以确认版本,就像MySQL或者Oracle一样,在连接实例之后才能进行的确认方式,和MySQL的使用方式基本都一致。

test=# select version();
                                        version                                        
---------------------------------------------------------------------------------------
 PostgreSQL 12.4 on x86_64-pc-linux-musl, compiled by gcc (Alpine 9.3.0) 9.3.0, 64-bit
(1 row)

test=#
字符串处理

MySQL中可以使用select "hello world"命令,在PostgreSQL可以使用类似如下命令(注意需要是单引号)

test=# select 'hello' || ' world'; ?column? ------------- hello world (1 row) test=#  
简单计算

类似Oracle里面的select from dual, 和mysql一样里面可以直接select

test=# select 3*7; ?column? ---------- 21 (1 row) test=# 
总结

总结

关注
打赏
1653961664
查看更多评论
立即登录/注册

微信扫码登录

0.4074s