在本文中,我们将学习如何使用 psql 查询 Azure Database for PostgreSQL 实例中托管的数据和数据库对象,并将查询结果导出到文件中。
介绍
Azure Database for PostgreSQL 是 Azure 在 Azure 云上提供的 PostgreSQL 数据库。pgAdmin 和 psql 是用于在 postgreSQL 上管理和开发数据库对象的两个最常用的工具。查询数据并提取数据的本地快照以供在数据库外部使用是处理数据库对象时最常见的用例之一。
创建 Azure Database for PostgreSQL 实例
假定 Azure Database for PostgreSQL 的实例已就位。还假设已经安装了 pgAdmin 工具并且已经使用 pgAdmin 调用了 psql。我们在上一篇文章中介绍了这个主题,因此那些不熟悉这些工具的人可以参考上一篇文章进行设置,然后再进行以下练习。
当我们使用 pgAdmin 工具时,浏览器窗格会列出几个与 postgreSQL 相关的对象类别。在使用基于终端的工具 psql 工具时,我们将调用命令来探索和检查这些数据库对象。因此,在继续练习之前,让我们以简洁的方式快速了解这些对象的含义。下面提到的是数据库对象类别的列表,并对其进行了简短描述。
- 架构 – Azure Database for PostgreSQL 可以包含一个或多个架构,它们是逻辑容器,用于组织下表中说明的任何可能的数据库对象。模式不能嵌套,跨模式的数据库对象可以相互访问。
- 聚合 - 此部分允许列出或搜索使用聚合函数的数据库对象。
- 排序规则 - 这是指数据库中使用的排序规则列表。排序规则通常用于控制数据库中不同对象使用的排序顺序的行为。
- 域——postgreSQL 中的域可以被认为是一种自定义数据类型,它由基本或原始数据类型组成,可选择附加约束。
- FTS – pgAdmin 浏览器窗格中有一组完整测试搜索 (FTS) 相关组,例如 FTS 配置、字典、解析器和模板。所有这些都与全文搜索的不同方面有关。
- 外部表——这些基本上是存在于与 postgreSQL 实例链接的外部数据源中的数据集或表。虽然这在 postgreSQL 中正常工作,但在使用 Azure Database for Postgresql 实例时可能会有一些限制,该实例是 Azure 中的托管服务。
- 函数——函数在 postgreSQL 中的含义与任何其他数据库相同。它可以具有内置或用户定义的功能。
- 物化视图——出于性能原因,如果从大表中访问数据在数据处理方面不是最佳的,则由各种表后处理产生的最终数据集被加载到称为物化视图的物理表中.
- 运算符——运算符的含义也与它在其他数据库中的含义相同。
- 过程 - 过程是由 SQL 语句组成的编译逻辑块,用于根据业务功能的要求处理数据。这些相当于 SQL Server 中的存储过程。
- 序列 - 由于名称是自相关的,序列通常根据指定的标准创建自动递增的数字。
- 表——表是 postgreSQL 数据库的基本块之一,它与其他数据库的含义相同。
- 触发器——触发器是在特定表操作发生时调用的操作,例如插入、更新或删除记录。这与其他数据库中的触发器相当。
- 类型——本节列出了可以被认为是枚举、结构或数组的复合类型。
- 视图——视图提供了实际表的抽象级别,这些表可能包含最终消费者所需的信息超集。
现在我们了解了这些数据库对象类别的重要性,我们可以开始实际练习探索这些数据库对象和其中的数据了。假定 psql 工具已打开并连接到 Azure Database for PostgreSQL 的实例。表是几乎每个人都使用的主要数据库对象之一。要列出托管在 Azure Database for PostgreSQL 实例上的数据库中的表,我们只需发出一个简单的命令“\dt”来列出所有表,结果将如下所示。在这里,我们可以看到数据库对象的名称和类型以及相同的所有者。
假设我们打算探索数据库实例中的所有视图,作为表和视图类别中的下一个逻辑数据库对象。我们可以发出相同的命令——“\dv”,其中 v 代表视图,结果如下所示。
使用相同的约定,我们也可以查询其他数据库对象,例如物化视图、索引和模式。要列出所有索引,请使用命令“\di”。要列出所有物化视图,请使用命令“\dm”。要列出所有模式,请使用命令“\dn”,结果如下所示。
假设我们打算列出具有确切名称或匹配模式的特定表,我们也可以使用列出表的标准命令来指定相同的表。如下所示,“\dt Employee”命令将只列出员工表,因为该命令使用表名作为参数,并根据参数过滤结果集。
在查询表之前,我们可能想知道相关表的架构。在这种情况下,我们可以发出命令“\d Employee”。在这里,我们要求探索作为参数传递给“\d”命令(即“Employee”)的数据库对象的模式。默认情况下,假定该表在公共模式中。如果找到数据库对象,模式结果将在输出中返回,如下所示。在这里,我们可以看到与表关联的字段、数据类型、排序规则、可为空、默认值、索引和约束。
如果我们打算探索所有感兴趣的数据库对象,我们可以发出命令“\dS”来列出所有对象,如下所示。
现在让我们查询表以查看数据。在这里,我们已经有一个小表,其中包含一些字段和记录。我们可以直接在 psql 控制台上输入 SQL 查询,结果如下图所示。请注意在查询后添加分号。如我们所见,psql 控制台充当查询终端,用于从 Azure Database for PostgreSQL 的数据库实例中查询数据。
现在我们知道如何使用 psql 工具探索数据库对象和查询数据,现在是时候将查询结果导出到本地文件了。我们可以按原样使用 SQL 查询并附加“\g”参数并指定我们希望导出结果的文件路径。在这种情况下,查询的输出将存储在文件中,而不是显示在终端窗口中。
航到文件路径并打开文件,结果将如下所示。
通过这种方式,我们可以使用 psql 终端列出数据库对象、从 Azure Database for PostgreSQL 的实例中查询数据以及将查询结果导出到本地文件。
结论
在本文中,我们学习了如何使用 psql 工具作为查询终端发出各种查询来探索数据库实例中的数据库对象,以及对数据库实例发出 DDL 和 DML 查询。
关于作者
Gauri 是一名 SQL Server 专家,拥有 6 年以上与全球跨国咨询和技术组织合作的经验。她对 Azure SQL 数据库、SQL Server Reporting Services、R、Python、Power BI、数据库引擎等 SQL Server 主题充满热情。她在技术文档方面拥有多年经验,并且喜欢技术创作。
她在设计数据和分析解决方案以及确保其稳定性、可靠性和性能方面拥有丰富的经验。她还获得了 SQL Server 认证,并通过了 70-463:使用 Microsoft SQL Server 实施数据仓库等认证。
原文标题:Querying data from Azure Database for PostgreSQL using psql
原文作者:Gauri Mahajan
原文地址:https://www.sqlshack.com/querying-data-from-azure-database-for-postgresql-using-psql/