PostgreSQL

前言

前段时间拿下了一个系统,但是数据库用的是PostgreSQL,奈何之前没接触过这个数据库,一时间竟只能现学现用。于是乎现在有空了来学习下PostgreSQL的用法。

遇到的小问题

  1. 安装好之后可以通过psql访问数据库,但我在客户端却无法连接到数据库。

报错:DBMS: PostgreSQL (no ver.)Case sensitivity: plain=mixed, delimited=exact尝试连线已失败。

解决:取消系统设置的socks5代理。

原理:暂时不详。

  1. 在连接创建数据库失败。

报错:createdb: error: connection to server on socket "/var/run/postgresql/.s.PGSQL.5432" failed: FATAL: role "xxx" does not exist

解决:createdb -U 用户名 testdb

原理:xxx不存在是指PostgreSQL中不存在xxx这个用户,使用一个存在的用户即可正常使用。

基础概念

PostgreSQL与MySQL一样是关系型数据库(RDBMS),但语法、输入合法性校验上更为严谨,

PostgreSQL的基础操作

连接数据库

1
psql "数据库名" -U "用户名"

Ps:链接数据库后的响应如果是数据库名=>则表示是普通用户,是数据库名=#则代表是管理员用户。

常用命令

\?会显示全部帮助信息

\h会显示SQL语句帮助信息

\q退出psql

\i 1.sql从1.sql中读取命令

\l查询全部数据库

\c 数据库名进入数据库

数据库相关操作

创建数据库

1
2
# shell
createdb -U 用户名 数据库名
1
2
# psql
create database 数据库名;

删除数据库

1
2
# shell
dropdb -U 用户名 数据库名
1
drop database 数据库名;

模式操作

PostgreSQL 模式(SCHEMA)可以看着是一个表的集合。

一个模式可以包含视图、索引、数据类型、函数和操作符等。

相同的对象名称可以被用于不同的模式中而不会出现冲突,例如 schema1 和 myschema 都可以包含名为 mytable 的表。

使用模式的优势:

  • 允许多个用户使用一个数据库并且不会互相干扰。
  • 将数据库对象组织成逻辑组以便更容易管理。
  • 第三方应用的对象可以放在独立的模式中,这样它们就不会与其他对象的名称发生冲突。

模式类似于操作系统层的目录,但是模式不能嵌套。

创建模式

create schema 模式名

create table 模式名.表名(...)

删除模式

drop schema 模式名

表相关操作

PostgreSQL的表操作语法和MySQL基本一致。

COPY命令

COPY可以从文件系统中将数据自动插入到数据库表中。

COPY 目标表 from 文件路径

PostgreSQL的一些特性