ITPub博客

首页 > 数据库 > 数据库开发技术 > 一文了解postgre以及在项目中常用的命令

一文了解postgre以及在项目中常用的命令

原创 数据库开发技术 作者:小南瓜开发平台 时间:2024-01-11 07:55:00 0 删除 编辑

前言

    最近在项目中使用到了postgreSQL,SQL语法规则与标准SQL语法非常相似,但也有一些自己的特性和扩展。下边结合实际项目使用,简单介绍一下:

一、PostgreSQL简介

PostgreSQL是一个强大的、高度可扩展的、开源的对象关系数据库系统,它使用并扩展了SQL语言,具有许多独特的特性和优势。

PostgreSQL的发展历史可以追溯到20世纪80年代末和90年代初。最早由加拿大的计算机科学家Michael Stonebraker和他的团队在加州伯克利分校启动。项目的目标是创建一个强大的、开源的关系型数据库管理系统。

PostgreSQL最初是作为Ingres的继承者而启动的,但后来发展成了一个全新的项目,采用了更加现代化的架构和设计。PostgreSQL于1996年首次以开源软件的形式发布,这意味着任何人都可以免费使用、修改和分发它。这一决定为PostgreSQL的成长和社区发展打下了坚实的基础。

PostgreSQL的第一个完全兼容ANSI SQL标准的版本在1995年发布,这一版本内嵌了丰富的编程语言支持,包括C、Java、Perl、PHP和Python等,首创了将数据库和编程语言完善结合的新技术。

随着时间的推移,PostgreSQL经历了多个版本的发布,每个版本都引入了新的功能和改进。它不断演化,以适应不断变化的需求,成为一个功能丰富、高度可扩展、安全可靠的数据库管理系统。

二、使用场景

由于PostgreSQL的强大特性和功能,它在许多领域都有广泛的应用。以下是一些常见的使用场景:

  1. 数据仓库和分析:由于PostgreSQL支持复杂查询和高级分析功能,它常被用于数据仓库和分析场景。通过结合其丰富的数据类型和强大的查询功能,PostgreSQL可以帮助组织和分析大规模数据集。

  2. 电子商务和在线零售:PostgreSQL可以处理高并发的读写操作,并提供了强大的事务管理和数据完整性约束。这使得它成为电子商务和在线零售平台的理想选择,能够支持大量用户的同时访问和交易操作。

  3. 内容管理系统:对于需要存储、管理和检索大量内容的应用程序(如博客平台、新闻网站或在线论坛),PostgreSQL可以提供可靠的数据存储和强大的查询功能。通过其丰富的数据类型和扩展机制,PostgreSQL可以轻松应对各种内容格式和查询需求。

  4. 社交网络:社交网络应用程序需要处理大量的用户生成内容和交互数据。PostgreSQL的可扩展性和强大的查询能力使其成为构建社交网络平台的理想选择。它能够支持用户关系管理、动态更新和复杂的查询需求。

  5. 移动应用程序后端:许多移动应用程序使用PostgreSQL作为后端数据库。通过其可扩展性和灵活性,PostgreSQL可以处理来自移动设备的请求,提供数据存储、用户认证和实时更新等功能。

  6. 科学研究:对于需要存储和管理大量科学数据的场景(如生物信息学、气象学或物理学研究),PostgreSQL的可定制性和高级功能非常有用。它提供了支持复杂查询和分析的工具,以及高效的数据存储和处理能力。

  7. 企业应用程序:对于需要高度可靠、可扩展和安全的数据存储的企业应用程序(如客户关系管理、人力资源管理和财务管理系统),PostgreSQL是一个常见的选择。它的开源生态系统和强大的安全功能为企业提供了灵活性和定制能力。

  8. 大数据处理和分析:对于需要处理大规模数据集的应用程序(如大数据分析平台或实时流数据处理系统),PostgreSQL的可扩展性和高性能特性非常有用。通过其高效的并发控制和强大的查询能力,PostgreSQL可以帮助组织和分析大规模数据集。

  9. 物联网(IoT):在物联网场景中,设备生成的大量实时数据需要存储和处理。PostgreSQL的可扩展性和高性能使其成为处理物联网数据的理想选择,能够支持实时数据流处理和复杂的分析查询。

  10. 嵌入式系统:虽然嵌入式系统通常使用轻量级数据库,但在某些情况下,可能需要更完整的关系数据库管理系统。PostgreSQL提供了丰富的功能集和高度可定制性,可在某些嵌入式系统中作为可行的选择。


三、PG的常见使用命令

1、连接数据库

登录数据库 ,-d为指定登录的数据库
psql -h 127.0.0.1 -p 7400 -U postgres -d postgres
查看数据库列表:\l 或者 SELECT datname FROM pg_database;查看用户或权限:\du 或特定用户 \du+ username连接数据库:\c cascade;


2、创建表空间

CREATE TABLESPACE 【spacename】 LOCATION '[space_path]';---- CREATE TABLESPACE fjbdjl LOCATION '/mnt/data1/postgres/data/test'


3、创建数据库

CREATE DATABASE 【db_name】 OWNER [user] ENCODING 'UTF8' TABLESPACE [space_name];--- CREATE DATABASE cascade OWNER cascade ENCODING 'UTF8' TABLESPACE test;


4、创建schema

连接数据库后创建schema:create schema cascade连接数据库后创建schema时指定一个所有者:CREATE SCHEMA cascade AUTHORIZATION cascade;


5、创建用户

5.1.  创建普通用户

CREATE USER [user] WITH PASSWORD '[password]';      --- CREATE USER cascade WITH PASSWORD 'password';

5.2. 设置超级用户权限

 CREATE USER [user]  WITH PASSWORD '[password]' SUPERUSER;     --CREATE USER cascade WITH PASSWORD 'password' SUPERUSER;


5.3. 指定特定的数据库和模式访问权限

CREATE USER  [user]   WITH PASSWORD '[password]' CREATEDB CREATEROLE;--- CREATE USER cascade WITH PASSWORD 'password' CREATEDB CREATEROLE;


5.4. 删除用户

DROP USER cascade;--- DROP USER cascade;


5.5、授予用户登录权限

       ALTER USER [user] LOGIN;    -- ALTER USER cascade LOGIN;


6、授权与回收(直接授权)

6.1.授权schema的使用权限给用户

GRANT USAGE ON SCHEMA cascade TO cascade;

6.2. 授权schema的表的CRUD权限给用户

GRANT SELECT,INSERT,UPDATE,DELETE ON ALL TABLES IN SCHEMA cascade TO cascade;

6.3 授权数据库给用户

GRANT ALL PRIVILEGES ON DATABASE 【db_name】TO 【user】; -- GRANT ALL PRIVILEGES ON DATABASE test TO cascade;

6.4 授权用户在schema下创建表的权限

授权单个schema:

GRANT CREATE ON SCHEMA [schema_name] TO [user]; -- GRANT CREATE ON SCHEMA cascade  TO cascade;

6.5 授权数据库中所有的schema,包括已创建schema和未创建schema

GRANT CREATE ON ALL SCHEMAS IN DATABASE [db_name] TO  [user]; -- GRANT CREATE ON ALL SCHEMAS IN DATABASE "cascade" TO cascade;

6.6【权限回收】:回收表的权限(表拥有者)

REVOKE SELECT ON abc FROM cascade; -- REVOKE SELECT,UPDATE,DELETE,INSERT ON [table_name] FROM [user];

6.7【权限回收】:回收schema的权限(schema拥有者)

REVOKE ALL ON SCHEMA [schema_name] FROM [user]; -- REVOKE ALL ON SCHEMA cascade FROM cascade;

6.8、修改schema的拥有者

ALTER SCHEMA [schema] OWNER TO [user]; --- ALTER SCHEMA cascade OWNER TO cascade;

7、 数据库查看相关操作

7.1 查询数据库拥有者

SELECT datname, pg_catalog.pg_get_userbyid(datdba) FROM pg_catalog.pg_database WHERE datname = '【db_name】'; -- SELECT datname, pg_catalog.pg_get_userbyid(datdba) FROM pg_catalog.pg_database WHERE datname = 'cascade';

7.2  查询schema拥有者

SELECT nspname,pg_catalog.pg_get_userbyid(nspowner) FROM pg_catalog.pg_namespace WHERE nspname = '[schema_name]'; --- SELECT nspname,pg_catalog.pg_get_userbyid(nspowner) FROM pg_catalog.pg_namespace WHERE nspname = 'cascade';

7.3 查看表空间

SELECT spcname, pg_tablespace_location(oid) FROM pg_tablespace;

7.4 查看schema下的表

SELECT table_name FROM information_schema.tables WHERE table_schema = '[schema_name]'; —-SELECT table_name FROM information_schema.tables WHERE table_schema = 'cascade'

7.5 查看当前版本

SELECT version();

7.6 查看当前用户

SELECT current_user;


四、PostgreSQL的一些主要特性

  1. 高度可扩展性:PostgreSQL允许用户通过添加自定义函数、数据类型和索引等方式扩展其功能。此外,它还支持分区表、流复制和并行查询等高级功能,以满足处理大量数据的需求。

  2. ACID兼容性:PostgreSQL支持ACID(原子性、一致性、隔离性和持久性)事务,确保在任何情况下都可以维护数据的完整性和一致性。

  3. 多版本并发控制(MVCC):PostgreSQL使用多版本并发控制(MVCC)来管理并发访问。MVCC可确保对数据的并发访问不会导致数据损坏或丢失。

  4. 丰富的数据类型:PostgreSQL内置了丰富的数据类型,如任意精度的数值、无限制长度的文本、几何图元、IP地址、数组等;同时还允许用户定义基于正规SQL类型的新类型,让数据库自身理解复杂数据,自定义类型中还可以包含继承关系。

  5. 编程接口:PostgreSQL同样拥有大量的编程接口供用户开发使用,如ODBC、JDBC(Java)、Libpq(C/C++)等。

  6. 可定制性:PostgreSQL拥有广泛的编程语言支持来实现函数功能,包括内置的PL/pgSQL过程语言,PL/Perl、plPHP、PL/Python、PL/Ruby、PL/Tcl等脚本语言,以及Java、C/C++等高级编程语言。函数的输出是一系列行类型的集合,可以在查询中当做表来使用,函数也可以被定义成以创建者或者调用者的身份运行。

  7. 索引手段:用户可以自定义索引方法或者使用内置B-Tree索引、Hash表索引、GiST索引、GIN索引。GiST索引不是某种特定的索引类型,而是一种通用索引基础结构,可以在这种结构上实现很多不同的索引策略。

  8. 安全性:PostgreSQL支持SSL连接、客户端认证和细粒度的访问控制等安全特性。

  9. GIS支持:PostgreSQL具有强大的GIS(地理信息系统)支持,可以存储和处理地理空间数据,并提供了丰富的GIS函数和操作符。

  10. JSON和XML支持:PostgreSQL提供了对JSON和XML数据类型的内建支持,包括查询和修改JSON数据的功能。

  11. 异步复制:PostgreSQL支持异步复制功能,可以在不同的数据库服务器之间实现数据同步。

  12. 在线备份和恢复:PostgreSQL支持在线备份和恢复功能,可以在不中断数据库服务的情况下进行备份和恢复操作。

  13. 嵌套事务:PostgreSQL支持嵌套事务,这使得应用程序可以处理更复杂的业务逻辑。

  14. 时间点恢复:PostgreSQL提供了时间点恢复功能,可以根据指定的时间点恢复数据库到该状态。

  15. 表空间机制:PostgreSQL支持表空间机制,可以将表和索引分散到不同的物理存储设备上以提高性能和可管理性。

  16. 性能调优器:PostgreSQL提供了预写日志容错技术、反向索引检索、表达式索引、部分索引、位图索引扫描等功能来提高查询性能。

  17. 嵌套查询和子查询:PostgreSQL支持嵌套查询和子查询,允许在查询中使用复杂的逻辑表达式和条件语句。

  18. 强大的触发器和规则系统:PostgreSQL支持触发器和规则系统,可以根据定义的条件自动执行相应的操作或触发其他事件。

  19. 国际化支持:PostgreSQL支持国际字符集和多字节字符编码,对格式化、排序、大小写敏感提供本地化支持。

  20. 社区支持和企业级支持:PostgreSQL有一个活跃的开发者社区和丰富的文档资源,同时也有一些公司提供企业级支持和培训服务。

原文作者:小南瓜开发平台;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论

注册时间:2020-08-21

  • 博文量
    209
  • 访问量
    89506