【postgresql 基础入门】从了解数据库访问权限,访问数据库,到认识数据库的所有者及属性,从此打开了数据库使用的大门

这篇具有很好参考价值的文章主要介绍了【postgresql 基础入门】从了解数据库访问权限,访问数据库,到认识数据库的所有者及属性,从此打开了数据库使用的大门。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

数据库操作

专栏内容

  • postgresql内核源码分析
  • 手写数据库toadb
  • 并发编程

开源贡献

  • toadb开源库

个人主页:我的主页
管理社区:开源数据库
座右铭:天行健,君子以自强不息;地势坤,君子以厚德载物.

系列文章

  • 入门准备
  • postgrersql基础架构
  • 快速使用
  • 初始化集群
  • 数据库服务管理
  • psql客户端使用
  • 创建数据库
  • 数据库操作

前言

postgresql 数据库是一款通用的关系型数据,在开源数据库中能与商业数据媲美,在业界也越来越流行。

因为是开源数据库,不仅公开源码,还有很多使用案例,好用的插件,所以它的慢慢变成了数据库的先驱和标准,通过postgresql可以很好从使用到原理,彻底搞懂;

如果是学习编程,也可以学到丰富的编程知识,数据结构,编程技巧,它里面还有很多精妙的架构设计,分层思想,可以灵活定制的思想。

本专栏主要介绍postgresql 入门使用,数据库维护管理,通过这些使用来了解数据库原理,慢慢了解postgresql是什么样的数据库,能做那些事情,以及如何做好服务,最关键的是这些知识都是面试的必备项。

概述

本文主要分享数据库系统中最基本的管理单位database,对它的一系列管理操作,主要从以下几方面展开:

  • 查询所有数据库
  • 进入指定数据库
  • 创建数据库
  • 修改数据库
  • 删除数据库
  • 查看数据库的统计

查看所有数据库

当作为DBA进行维护时,我们需要知道当前集群中有多少数据库,查看方法常用以下几种;

  • 通过SQL查询数据字典
  • 通过psql命令查看数据库概要列表

通过SQL查看数据字典

在数据库系统中,所有数据的组织信息,我们统称为数据字典,数据字典呈现出来的逻辑形式,就是一系列的表,因为它是数据库系统自动生成,并且自动维护的,我们也叫做系统表。

对于database的信息,也记录在一张系统表当中,它就是 pg_database, 先来看一下它的表中有那些字段;

postgres=# \d pg_database
               Table "pg_catalog.pg_database"
     Column     |   Type    | Collation | Nullable | Default
----------------+-----------+-----------+----------+---------
 oid            | oid       |           | not null |
 datname        | name      |           | not null |
 datdba         | oid       |           | not null |
 encoding       | integer   |           | not null |
 datlocprovider | "char"    |           | not null |
 datistemplate  | boolean   |           | not null |
 datallowconn   | boolean   |           | not null |
 datconnlimit   | integer   |           | not null |
 datfrozenxid   | xid       |           | not null |
 datminmxid     | xid       |           | not null |
 dattablespace  | oid       |           | not null |
 datcollate     | text      | C         | not null |
 datctype       | text      | C         | not null |
 daticulocale   | text      | C         |          |
 daticurules    | text      | C         |          |
 datcollversion | text      | C         |          |
 datacl         | aclitem[] |           |          |
Indexes:
    "pg_database_oid_index" PRIMARY KEY, btree (oid), tablespace "pg_global"
    "pg_database_datname_index" UNIQUE CONSTRAINT, btree (datname), tablespace "pg_global"
Tablespace: "pg_global"

各字段的含义解释如下:

字段名 描述
oid 数据库的唯一标识符,它在系统内部使用;
datname 数据库的名称;
datdba 数据库所有者的用户OID(对象标识符);
encoding 数据库使用的字符编码;
datlocprovider 此数据库的区域设置提供程序:= libc,= icuci;
datistemplate 这是一个标志,指示数据库是否是一个模板。如果为 true,则此数据库可由任何具有权限的用户克隆;如果为 false,则只有超级用户或数据库所有者才能克隆它。
datallowconn 如果为 false,则没有人可以连接到此数据库。这用于保护数据库不被更改。
datconnlimit 这是数据库当前打开的连接数限制。-1 表示没有限制,-2 表示数据库无效。
datfrozenxid 此数据库中的比此值大的所有事务 ID都已替换为冻结事务ID;用于事务号的回收机制;
datminmxid 此数据库中的比引值大的所有multixact ID 都已替换为事务ID;用于事务号的回收机制;
dattablespace 数据库使用的表空间OID(对象标识符)。
datcollate 此数据库的LC_COLLATE;
datctype 此数据库的LC_CTYPE;
daticulocale 此数据库的 ICU 区域设置 ID;
daticurules 此数据库的 ICU 排序规则;
datcollversion 特定于提供程序的排序规则版本。这在创建数据库时记录,然后在使用数据库时进行检查,以检测排序规则定义中可能导致数据损坏的更改。
datacl 访问权限;

重点了解几个字段,在系统内部每个数据库对象都有唯一标识 OID,也就是一个编号,对应一个表空间,也就是存储层次;另外还有访问权限的限制,并不是随意都可以访问;
特别的,我们需要知道,database的所有者是谁,也就是datdba字段,因为它可是这个database的老大;

好了,了解之后,就很简单,我们查询一下就知道当前数据库系统有多少个database了;

db_factory=> select oid,datname,datdba,dattablespace , datacl from pg_database ;
  oid  |   datname   | datdba | dattablespace |                     datacl
-------+-------------+--------+---------------+------------------------------------------------
     5 | postgres    |     10 |          1663 |
     1 | template1   |     10 |          1663 | {=c/senllang,senllang=CTc/senllang}
     4 | template0   |     10 |          1663 | {=c/senllang,senllang=CTc/senllang}
 16446 | db_factory1 |     10 |          1663 |
 16445 | db_factory  |  16451 |          1663 | {=Tc/manager,manager=CTc/manager,hr=C/manager}
(5 rows)

刚说到访问权限,那么对于系统表的访问权限,因为是字典嘛,默认是所有用户都有权限;

psql查看数据库列表

psql是常用的命令行客户端,它本身提供了很多简单的操作命令,比如查看数据库的列表就是 \l, 在之前分享中也多次用过;

db_factory=> \l
                                                        List of databases
    Name     |  Owner   | Encoding | Locale Provider |   Collate   |    Ctype    | ICU Locale | ICU Rules |   Access privileges
-------------+----------+----------+-----------------+-------------+-------------+------------+-----------+-----------------------
 db_factory  | manager  | UTF8     | icu             | en_US.UTF-8 | en_US.UTF-8 | en-US      |           | =Tc/manager          +
             |          |          |                 |             |             |            |           | manager=CTc/manager  +
             |          |          |                 |             |             |            |           | hr=C/manager
 db_factory1 | senllang | UTF8     | icu             | en_US.UTF-8 | en_US.UTF-8 | en-US      |           |
 postgres    | senllang | UTF8     | icu             | en_US.UTF-8 | en_US.UTF-8 | en-US      |           |
 template0   | senllang | UTF8     | icu             | en_US.UTF-8 | en_US.UTF-8 | en-US      |           | =c/senllang          +
             |          |          |                 |             |             |            |           | senllang=CTc/senllang
 template1   | senllang | UTF8     | icu             | en_US.UTF-8 | en_US.UTF-8 | en-US      |           | =c/senllang          +
             |          |          |                 |             |             |            |           | senllang=CTc/senllang
(5 rows)

可以看到执行结果,数量是一样,但是信息比从pg_database查到的少一些,它主要提供一个概要信息,如果需要详细信息还是要从系统表中查看。

进入指定数据库

在每次登录时,都是需要指定某个数据库;当然登录的方式可以是图形化客户端,或者是JDBC的连接,也可以是psql;
比如通过psql进入数据库 db_factory ,用户为 hr;

[senllang@hatch bin]$ ./psql -d db_factory  -U hr
psql (16beta1)
Type "help" for help.

db_factory=>

创建数据库

CREATE DATABASE db_factory;

创建数据库详细步骤和方面,已经在之前分享过了,这里不再重复,查看本专栏内容;

修改数据库

很少有人修改数据库的属性,因为数据库一般都是提前规划好的,而且影响比较大。 但是作为DBA需要了解,有那些属性是可以修改,以及修改带来的影响会是什么。

数据库可以被修改的大致主要有以下几类型:

  • 修改数据库的属性;
  • 修改数据库的名称;
  • 修改数据库的表空间;
  • 修改数据库的拥有者onwer;
  • 数据库运行时参数

当然做这些操作时,当前数据库用户为超级管理员用户或者拥有者;

数据库属性修改

数据库属性中的以下值可以进行修改

  • ALLOW_CONNECTIONS 连接属性;
  • CONNECTION LIMIT 连接数量限制;
  • IS_TEMPLATE 模版属性
    这些参数就是pg_database系统表中所列的内容,影响数据库的访问;

数据库名称修改

数据库名称变更

postgres=# \c postgres manager
You are now connected to database "postgres" as user "manager".
postgres=> alter database db_factory rename to db_factory2;
ALTER DATABASE

manager用户具用createdb权限,同时也是db_factory的拥有者;不能修改当前登录数据库的名称,所以我们登录到其它数据库,再执行rename的SQL语句。

数据库所属表空间变更

在分享存储空间时,提到表空间其实是数据库的物理存储位置;那么变更表空间,也意味着给数据库搬个家,听起来就觉得麻烦。

这个命令的应用场景也很少,只有当前表空间的存储空间不足时,或者当前表空间对应的磁盘需要维护时,给数据库挪个位置,如果数据库中数据比较关键,提前需要做好备份归档。

首先修改的用户必须有对应表空间的使用权限,我们还是用manager用户操作,给manager用户赋予表空间tblspc_test1的所有权限。

postgres=# grant all ON tablespace tblspc_test1 TO manager ;
GRANT

切换到以manager用户登录,更换db_factory2的表空间,原来是在默认表空间下;

postgres=# \c postgres manager
You are now connected to database "postgres" as user "manager".
postgres=> alter database db_factory2 set tablespace tblspc_test1 ;
ALTER DATABASE

数据库的owner变更

owner是这个数据库的所有权限的拥有者,更换之后原来的owner用户会失去权限;

可以执行的前提前,执行者可以是超级管理员,或者是当前的owner用户,同时还是新owner用户的成员,否则不能执行;也就是说,新owner和旧的owner在执行后,会具用相同的权限;如果不需要旧owner用户时,可以从成员中踢除即可;这一限制保证变更过程的平滑;

假设要把db_factory2的拥有者从manager更换为 vp用户;

  • 先用超级管理员用户创建新用户 vp,并且赋予 createdb权限;
postgres=# create user vp createdb password '123456';
CREATE ROLE
  • manager作为新用户的成员
postgres=# grant manager to vp;
GRANT ROLE
  • 然后用 manager用户登录数据库 db_factory2,进行拥有者切换
postgres=# \c db_factory2 manager
You are now connected to database "db_factory2" as user "manager".
db_factory2=> alter database db_factory2 owner to vp;
ALTER DATABASE

运行时参数修改

数据库中的参数很多,具体可以查看配置文件

比如在数据库 db_factory2 禁用索引扫描,可以执行以下SQL

ALTER DATABASE db_factory2 SET enable_indexscan TO off;

删除数据库

当我们不需要某个数据库时,可以进行删除,释放对应的磁盘空间,同时避免后台数据库服务不断扫描废弃数据库,进行维护任务;

删除数据库的方法,可以用命令dropdb,也可以使用SQL语句;

命令删库

在安装目录下的bin目录下,可以看到dropdb命令,查看帮助如下

[senllang@hatch bin]$ ./dropdb --help
dropdb removes a PostgreSQL database.

Usage:
  dropdb [OPTION]... DBNAME

Options:
  -e, --echo                show the commands being sent to the server
  -f, --force               try to terminate other connections before dropping
  -i, --interactive         prompt before deleting anything
  -V, --version             output version information, then exit
  --if-exists               don't report error if database doesn't exist
  -?, --help                show this help, then exit

Connection options:
  -h, --host=HOSTNAME       database server host or socket directory
  -p, --port=PORT           database server port
  -U, --username=USERNAME   user name to connect as
  -w, --no-password         never prompt for password
  -W, --password            force password prompt
  --maintenance-db=DBNAME   alternate maintenance database

Report bugs to <pgsql-bugs@lists.postgresql.org>.
PostgreSQL home page: <https://www.postgresql.org/>

可以看到,默认情况下,参数是数据库名称就可以了。

这也是推荐的删除数据库的方式,不需要登录到某一个数据库中;

SQL删库

postgresql 还提供了SQL方式,SQL标准中没有这个命令;

DROP DATABASE db_factory2;

当然这个由管理员和拥有者执行,当有该数据库还有连接时,会执行失败;

  • 特别注意,删除数据库是不能撤销的动作,要特别小心;

查看数据库的统计

当然在维护时,我们还可以查看数据库上的一些指标,也就是统计信息,来衡量数据库的状态;

这些信息在pg_stat_database 这张系统表中

postgres=# select * from pg_stat_database where datname='db_factory2';
 datid |   datname   | numbackends | xact_commit | xact_rollback | blks_read | blks_hit | tup_returned | tup_fetched | tup_inserted | tup_updated | tup_deleted | conflicts | temp_files | temp_bytes | deadlocks | che
cksum_failures | checksum_last_failure | blk_read_time | blk_write_time | session_time | active_time | idle_in_transaction_time | sessions | sessions_abandoned | sessions_fatal | sessions_killed | stats_reset
-------+-------------+-------------+-------------+---------------+-----------+----------+--------------+-------------+--------------+-------------+-------------+-----------+------------+------------+-----------+----
---------------+-----------------------+---------------+----------------+--------------+-------------+--------------------------+----------+--------------------+----------------+-----------------+-------------
 16445 | db_factory2 |           0 |        6339 |            19 |       218 |   244990 |      2750338 |       52930 |          134 |          12 |          94 |         0 |          0 |          0 |         0 |
               |                       |             0 |              0 | 56623309.239 |     253.288 |                        0 |       29 |                  0 |              0 |               0 |
(1 row)

前缀是 pg_stat_ 系统表,是一类统计信息记录表,可以看到一些运行状态的统计;比如数据库统计信息中连接数量,事务提交、回滚的数量,等等。这些信息在后面用到时会再详细介绍。

总结

希望通过本篇分享,能对数据库有进一步了解,对于数据库的在系统中的维一标识,拥有者的权限,它是拥有该数据库所有权限,同时每个数据库都在存储位置,对应的就是表空间,这些信息可以通过登录,查看数据库的系统字典,以及统计信息来详细了解。

结尾

非常感谢大家的支持,在浏览的同时别忘了留下您宝贵的评论,如果觉得值得鼓励,请点赞,收藏,我会更加努力!

作者邮箱:study@senllang.onaliyun.com
如有错误或者疏漏欢迎指出,互相学习。

注:未经同意,不得转载!文章来源地址https://www.toymoban.com/news/detail-709650.html

到了这里,关于【postgresql 基础入门】从了解数据库访问权限,访问数据库,到认识数据库的所有者及属性,从此打开了数据库使用的大门的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • PGSQL(PostgreSQL)数据库基础篇:PostgreSQL 的 主要优点 、 劣势 、体系结构 、核心功能 、安装教程。

    1.维护者是PostgreSQL Global Development Group,首次发布于1989年6月。 2.操作系统支持WINDOWS、Linux、UNIX、MAC OS X、BSD。 3.从基本功能上来看,支持ACID、关联完整性、数据库事务、Unicode多国语言。 4.表和视图方面,PostgreSQL支持临时表,而物化视图,可以使用PL/pgSQL、PL/Perl、PL/Python或其

    2024年04月26日
    浏览(61)
  • 数据库入门-----SQL基础知识

    目录 📖前言: 📑SQL概述通用语法:  🐳DDL: 🐻操作数据库: 🐞数据类型:  🦉操作表: 🦦DML: 语法规则: 案例演示: 🦏DQL: 语法规则: 案例演示: # 基础查询:  # 条件查询:  #聚合函数:  # 分组查询:  #排序查询:  #分页查询:  执行顺序: 🫎DCL: 语法规则:

    2024年04月10日
    浏览(53)
  • 零基础入门MySQL数据库(全)

    一切从创建数据库开始 数据库→基本表(创建-增删改查)→视图(创建-增删改查) 1.1 数值型 1.2 字符型 1.3 日期型 2.1 创建数据库 2.2 修改数据库 2.3 删除数据库 3.1 表结构 3.1.1 创建表结构 定义 创建学生表student 唯一性标识 id:整型,自动增长列,主键 学号 sno:9个字符,非

    2023年04月09日
    浏览(46)
  • 【100天精通python】Day30:使用python操作数据库_数据库基础入门

     专栏导读  专栏订阅地址: https://blog.csdn.net/qq_35831906/category_12375510.html 1.1 什么是数据库?         数据库是一个结构化存储和组织数据的集合,它可以被有效地访问、管理和更新。数据库的目的是为了提供一种可靠的方式来存储和管理大量的数据,以便用户和应用程序

    2024年02月13日
    浏览(59)
  • MySQL入门指南:数据库操作的基础知识

    当谈到关系型数据库管理系统(RDBMS)时,MySQL无疑是最常见和广泛使用的一个。它是一个强大的工具,用于存储、管理和检索数据。在这篇博客中,我们将介绍MySQL的基本知识,包括数据库的操作、数据表的操作以及数据的增删改查~~ 目录 1. 数据库的操作 1.1 创建数据库 1.2 删除

    2024年02月07日
    浏览(95)
  • postgresql|数据库|MySQL数据库向postgresql数据库迁移的工具pgloader的部署和初步使用

    MySQL数据库和postgresql数据库之间的差异并不多,这里的差异指的是对SQL语言的支持两者并不大,但底层的东西差异是非常多的,例如,MySQL的innodb引擎概念,数据库用户管理,这些和postgresql相比是完全不同的(MySQL用户就是用户,没有角色,postgresql有用户,有角色,但差异不

    2024年02月14日
    浏览(82)
  • Django基础入门⑩:Django查询数据库操作详讲

    🏘️🏘️个人简介:以山河作礼。 🎖️🎖️: Python领域新星创作者,CSDN实力新星认证,阿里云社区专家博主,CSDN内容合伙人 🎁🎁:Web全栈开发专栏:《Web全栈开发》免费专栏,欢迎阅读! 🎁🎁: 文章末尾扫描二维码可以加入粉丝交流群,不定期免费送书。 添加数据 存储

    2024年02月13日
    浏览(51)
  • 【科研入门】会议、期刊、出版社、文献数据库、引文数据库、SCI分区、影响因子等基础科研必备知识

    大家好,我是洲洲,欢迎关注,一个爱听周杰伦的程序员。关注公众号【程序员洲洲】即可获得10G学习资料、面试笔记、大厂独家学习体系路线等…还可以加入技术交流群欢迎大家在CSDN后台私信我! 会议论文一定是针对某个学术会议投稿,并且由学术会议的会务组决定是否

    2024年02月11日
    浏览(58)
  • postgresql数据库定时备份到远程数据库

    1.老规矩,服务器目录结构: conf目录无内容 profile: 其中: 最后一行 export PGPASSWORD=‘root’ 是需要备份的数据库的密码,因为直接用 pg_dump 命令备份需要输入密码交互,而我们需要达到自动备份,所以借助这种方式不需要输入密码 docker-compose.yml: 启动容器: 然后再data目录下面

    2024年02月09日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包