PostgreSQL的学习心得和知识总结(一百四十二)|深入理解PostgreSQL数据库数据库之 Continuous Integration

本文主要是介绍PostgreSQL的学习心得和知识总结(一百四十二)|深入理解PostgreSQL数据库数据库之 Continuous Integration,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


注:提前言明 本文借鉴了以下博主、书籍或网站的内容,其列表如下:

1、参考书籍:《PostgreSQL数据库内核分析》
2、参考书籍:《数据库事务处理的艺术:事务管理与并发控制》
3、PostgreSQL数据库仓库链接,点击前往
4、日本著名PostgreSQL数据库专家 铃木启修 网站主页,点击前往
5、参考书籍:《PostgreSQL中文手册》
6、参考书籍:《PostgreSQL指南:内幕探索》,点击前往
7、参考书籍:《事务处理 概念与技术》


1、本文内容全部来源于开源社区 GitHub和以上博主的贡献,本文也免费开源(可能会存在问题,评论区等待大佬们的指正)
2、本文目的:开源共享 抛砖引玉 一起学习
3、本文不提供任何资源 不存在任何交易 与任何组织和机构无关
4、大家可以根据需要自行 复制粘贴以及作为其他个人用途,但是不允许转载 不允许商用 (写作不易,还请见谅 💖)
5、本文内容基于PostgreSQL master源码开发而成


PostgreSQL数据库数据库之 Continuous Integration

  • 文章快速说明索引
  • 功能使用背景说明
    • README
    • Wiki
  • How to Add More Environments to the Postgres CI



文章快速说明索引

学习目标:

做数据库内核开发久了就会有一种 少年得志,年少轻狂 的错觉,然鹅细细一品觉得自己其实不算特别优秀 远远没有达到自己想要的。也许光鲜的表面掩盖了空洞的内在,每每想到于此,皆有夜半临渊如履薄冰之感。为了睡上几个踏实觉,即日起 暂缓其他基于PostgreSQL数据库的兼容功能开发,近段时间 将着重于学习分享Postgres的基础知识和实践内幕。


学习内容:(详见目录)

1、PostgreSQL数据库数据库之 Continuous Integration


学习时间:

2024年05月09日 20:43:46


学习产出:

1、PostgreSQL数据库基础知识回顾 1个
2、CSDN 技术博客 1篇
3、PostgreSQL数据库内核深入学习


注:下面我们所有的学习环境是Centos8+PostgreSQL master +Oracle19C+MySQL8.0

postgres=# select version();version                                                   
------------------------------------------------------------------------------------------------------------PostgreSQL 17devel on x86_64-pc-linux-gnu, compiled by gcc (GCC) 8.5.0 20210514 (Red Hat 8.5.0-21), 64-bit
(1 row)postgres=##-----------------------------------------------------------------------------#SQL> select * from v$version;          BANNER        Oracle Database 19c EE Extreme Perf Release 19.0.0.0.0 - Production	
BANNER_FULL	  Oracle Database 19c EE Extreme Perf Release 19.0.0.0.0 - Production Version 19.17.0.0.0	
BANNER_LEGACY Oracle Database 19c EE Extreme Perf Release 19.0.0.0.0 - Production	
CON_ID 0#-----------------------------------------------------------------------------#mysql> select version();
+-----------+
| version() |
+-----------+
| 8.0.27    |
+-----------+
1 row in set (0.06 sec)mysql>

功能使用背景说明

README

下面是PostgreSQL的 https://github.com/postgres/postgres/blob/master/src/tools/ci/README 的内容,如下:

Postgres Continuous Integration (CI)

Postgres 有两种形式的 CI:

  1. main postgres 存储库中所有支持的分支都通过 buildfarm 进行持续测试。由于这仅涵盖主存储库,因此不能在功能开发过程中使用它。有关详细信息,请参阅 https://buildfarm.postgresql.org/

  2. 对于尚未合并的开发工作,可以为一些 git 托管提供商启用 CI。这使得开发人员可以在合并(甚至提交)补丁之前在多个平台上测试补丁。


Configuring CI on personal repositories

目前,postgres 包含利用 cirrus-ci 的 CI 支持。cirrus-ci 目前仅适用于 github。


Enabling cirrus-ci in a github repository

要在存储库上启用 cirrus-ci,请访问 https://github.com/marketplace/cirrus-ci:

  • 并选择"Public Repositories"
  • 然后"Install it for free""Complete order"
  • 下一页允许配置 cirrus-ci 可以访问的存储库。选择相关存储库并"Install"

See also https://cirrus-ci.org/guide/quick-start/

一旦在存储库上启用,该存储库中未来的提交和拉取请求将自动触发 CI 构建。这些可以从提交历史记录/PR 中看到,也可以在 cirrus-ci UI 中查看:

https://cirrus-ci.com/github/<username>/<reponame>/-- 例如本人的
-- https://cirrus-ci.com/github/TsinghuaLucky912/postgres

在这里插入图片描述

提示:所有构建日志文件都会上传到 cirrus-ci,并且可以在单击构建摘要页面上的特定任务后从 cirrus-ci UI 的"Artifacts"部分下载。


Images used for CI

为了保持 CI 时间可以忍受,大多数平台都使用预先生成的图像。一些平台使用容器,其他平台使用完整的虚拟机。两者的镜像都是从 CI 运行中单独生成的,否则每个正在测试的 git 存储库都需要构建自己的一组容器,这将是浪费(在空间和时间上)。

这些镜像是根据 https://github.com/anarazel/pg-vm-images/ 中的规范每天构建的。


Controlling CI via commit messages

CI 的行为可以通过提交消息中的特殊内容来控制。目前可以使用以下控件:

  • ci-os-only: {(freebsd|linux|macos|windows|mingw)}

仅在指定的操作系统上运行 CI。当解决仅影响平台子集的可移植性问题时,这非常有用。


Using custom compute resources for CI

在存储库中运行大量测试时,cirrus-ci 的免费积分是不够的。在这些情况下,可以将存储库配置为使用其他基础设施来运行测试。为此,可以在 cirrus-ci Web 界面中为存储库配置 REPO_CI_CONFIG_GIT_URL 变量,网址为 https://cirrus-ci.com/github/<用户或组织>。该变量引用的文件(参见 https://cirrus-ci.org/guide/programming-tasks/#fs )可以覆盖不同操作系统的默认执行方法,该方法定义在 .cirrus.yml 中(通过重新定义相关的yaml锚)

可以使用以下方式提供自定义计算资源:

  • https://cirrus-ci.org/guide/supported-computing-services/
  • https://cirrus-ci.org/guide/persistent-workers/

Wiki

wiki链接:https://wiki.postgresql.org/wiki/Continuous_Integration

这里有一些关于如何使用各种免费持续集成服务的信息,供 PostgreSQL 黑客使用。您需要一个 BitBucket、GitHub、GitLab 或其他公共源存储库帐户。然后,您需要选择一项或多项 CI 服务并告诉它监视您的帐户。对于流行的存储库主机,您不必在 CI 提供商网站上创建新帐户 - 您只需授予访问权限。最后,您必须告诉它如何使用源树中的一个或多个控制文件构建分支。您可以在仅存在于功能开发分支中的额外提交中添加控制文件。

非官方的 PostgreSQL Cfbot Patch Tester 使用其中的几个服务来测试发布到 -hackers 邮件列表的补丁,它创建的分支包含一些可能有用的示例控制文件。


Postgres CI on github

这是在各种环境上测试补丁的推荐方法,使用与非官方 commit fest 机器人相同的 CI。您可以按照 https://github.com/postgres/postgres/blob/master/src/tools/ci/README 中的说明在自己的 github 存储库上配置它。它非常简单,几分钟内即可完成配置。


AppVeyor

AppVeyor 在 Windows、Linux、macOS 上构建和测试代码。支持 GitHub、GitHub Enterprise、Bitbucket、GitLab、VSTS、Kiln 或自定义可公开访问的存储库。来自 Peter Eisentraut 的 讨论 的 MingGW、Cygwin、MSVC appveyor.yml 文件


Cirrus CI

Cirrus CI 至少支持 Windows、Linux、FreeBSD 和 macOS,因此它目前拥有 PostgreSQL 所针对的最广泛的操作系统(并且可能很快还会有更多)。它仅支持 Github 作为源,并且可以从 Github Marketplace 轻松地为您的帐户启用。对于开源项目来说它是免费的。

这是一个正在进行的示例,说明如何使用它在这四个操作系统上构建 PostgreSQL 分支。单击绿色复选标记查看结果,然后查看该分支中的顶部提交以获取控制文件。.cirrus.yml 文件包含进一步工作的待办事项列表…


CodeCov

CodeCov 不是 CI 系统,但与之密切相关且值得一提。如果您配置 Travis CI 来构建和测试启用了覆盖率的分支,您可能还会有兴趣在 CodeCov 上漂亮的 Web 界面中查看代码覆盖率信息。


Travis CI

Travis CI 支持 Linux、macOS 甚至更多。仅适用于 GitHub。由 .travis.yml 文件控制。


How to Add More Environments to the Postgres CI

  • 原文链接:How to Add More Environments to the Postgres CI,点击前往

您是否曾经使用过 Postgres 源代码并且不确定是否破坏了任何东西?Postgres 有一个相当全面的回归测试套件,有助于确保没有任何问题。当然,您可以在您的计算机上运行这些测试并检查您的 Postgres 版本是否正常工作。但它总是可以在你的机器上运行,对吗? 其他环境呢?

在这篇博文中,您将根据我创建第一个 Postgres 补丁的经验和学习,了解如何启用和使用 Postgres CI(以及如何为其做出贡献!)。具体来说,您将学到:

  1. 如何为 GitHub 分支启用 PostgreSQL 的 CI
  2. 如何在 MinGW 环境中在 Windows 上构建和测试 Postgres
  3. 如何将新环境添加到 PostgreSQL CI 中

在这里插入图片描述

如何在 GitHub 分支中启用 PostgreSQL 的 CI

Postgres 因在多个不同平台上运行而享有盛誉。因此,验证您的代码是否可以跨这些不同的平台运行非常重要。这就是 CI 工具派上用场的地方。PostgreSQL 自带了自己推荐的 CI:Cirrus CI。您可以检查并了解 Postgres 的 CI 并在您的 fork 上运行 CI。Cirrus CI 支持 Windows、Linux、FreeBSD 和 macOS,并允许您在这些操作系统上测试您的更改。

要通过 Cirrus CI 运行测试,只需按照以下步骤操作:

  1. 在 GitHub 上分叉 PostgreSQL 存储库
  2. 在 GitHub 市场上搜索 Cirrus CI 应用程序并将该应用程序添加到您的帐户
    GitHub 市场上的 Cirrus CI 应用程序的屏幕截图。您可以轻松设置免费试用并开始使用 Cirrus
  3. 确保 Cirrus CI 应用程序可以访问您刚刚在步骤 1 中分叉的 Postgres 存储库
  4. Cirrus CI 现在已准备好运行。一旦您将提交推送到 Postgres 分支,Cirrus 将使用您最近的提交运行 CI 任务

随着您的新提交,GitHub 将向您显示 CI 检查已排队或正在运行。例如 我前几天写的一个功能的CI,如下:

设置具有存储库访问权限的 Cirrus CI 后,Cirrus CI 在 GitHub 上检查 Postgres 存储库中的提交的屏幕截图

在这里插入图片描述

您还可以通过导航到 Cirrus 查看更多详细信息。Cirrus CI 上的官方 Postgres 存储库如下所示:

官方 Postgres 存储库的概述类似于 Cirrus CI 上的内容。您可以查看提交的历史记录及其 CI 结果

Cirrus CI 将向您显示每次提交的构建结果,并在出现错误时上传日志文件。

现在您知道需要做什么才能从 Postgres 的 CI 中受益。即使 Cirrus CI 目前是其他 Postgres CI 中操作系统范围最广的一个,但支持的环境数量仍然有限。目前,Cirrus CI 上的 Postgres 只有四种操作系统可用。如果您需要更多,您当然可以通过以下两个步骤将环境添加到 PostgreSQL 的 CI 中:

  1. 在目标环境中成功构建 Postgres
  2. 将该环境添加到 Postgres 的 CI 中

如何在 MinGW 环境中在 Windows 上构建和测试 Postgres

本节介绍如何使用 MinGW 在 Windows 上构建 Postgres。MinGW 代表 Minimal GNU for Windows,我选择它作为添加到 Postgres CI 的新环境。如果您已经熟悉在 MinGW 上构建 Postgres 或者您的目标环境不同,则可以跳过本节。

如果您曾经研究过如何在 Windows 上构建 Postgres,您就会知道有不止一种方法可以做到这一点。

  • 使用 Visual Studio:构建 Postgres 的最 Windows 方式是使用 Microsoft Visual Studio。Postgres 已经有了 Visual Studio 的 CI 任务。
  • 使用 MinGW:另一种方法是在 Windows 上使用 MinGW。我个人喜欢在 Windows 上使用 MinGW for Postgres,因为它允许您使用 GNU 工具在 Windows 上构建 Postgres。既然如此,本文中添加到 Postgres CI 中的环境就是 MinGW。

将 MinGW 与 MSYS2 结合使用:如果您也决定使用 MinGW,我建议安装 MSYS2,这是一个提供 MinGW 环境等的工具。MSYS2 附带了您可能熟悉的 Unix 环境工具和包管理器,使我们能够获取为 Windows 原生构建的包。

MSYS2 并没有为我们提供单一的 MinGW 环境。MSYS2 上有两种 C 标准库变体:

  • Microsoft Visual C++ 运行时 (MSVCRT)。然而,即使 MSVCRT 在 Windows 上也可用,它也是一个较旧的库,不兼容 C99。
  • 通用 C 运行时 (UCRT)。UCRT 是最新版本,默认情况下由 Microsoft Visual Studio 使用,因此 UCRT 的构建行为就像本地构建一样。

如果您已准备好 MSYS2,则可以继续使用 MinGW 和 UCRT 环境来实际从源代码构建 Postgres。


通过 MinGW 和 UCRT 构建 PostgreSQL 的步骤

  1. 您可以通过在 Windows 上搜索 MSYS2 MinGW UCRT x64 或将名为 MSYSTEM 的环境变量设置为 UCRT64 来运行带有 UCRT shell 的 MinGW。默认的 MSYS2 环境由 MSYSTEM 变量(如果已设置)决定。
  2. 设置 MSYSTEM 后,您可以通过 PowerShell 运行以下命令,使用 UCRT shell 启动 MinGW:
$env:MSYSTEM = ‘UCRT64’
C:\<Path to MSYS installation>\usr\bin\bash.exe -l
  1. 如果您是第一次启动 MinGW,请首先更新基础包和数据库。
pacman -Suy
  1. 然后安装所需的软件包以在 MinGW 上构建 Postgres
pacman -S --needed git bison flex diffutils make ucrt64/mingw-w64-ucrt-x86_64-gcc 
  1. 现在您已完成 MinGW 环境设置。让我们继续查看 Postgres 文档中的安装说明。在此之后,该过程就像我们如何在基于 Unix 的环境中构建 Postgres 一样。您需要运行configure 和make 命令,它们将完成工作。
./configure --enable-cassert --enable-debug 
  1. 如果所有这些步骤都成功,您可以运行 make check 并查看新构建的 Postgres 是否一切正常。您可能还想启用一些附加配置选项。尽管 MinGW 中并非提供所有这些选项,但您可以尝试使用其中一些选项进行构建,例如 icu、lz4 等。以下是如何通过运行安装一小部分 Postgres 依赖项:
pacman -S ucrt64/mingw-w64-ucrt-x86_64-{icu,libxml2,libxslt,lz4}## 然后相应地更改配置命令:
./configure --host=x86_64-w64-mingw32 --with-icu --with-libxml --with-libxslt --with-lz4 

如何将您的环境添加到 Postgres CI 中

现在您知道如何准备 MinGW 环境以及构建 Postgres 所需的步骤。如果 Cirrus CI 可以为我们完成所有这些工作,那不是很棒吗?令人高兴的是,您可以告诉 Cirrus 运行构建 Postgres 所需的命令。

首先要让 Cirrus 知道要在哪个环境上运行。此环境可以是 Cirrus CI 默认提供的环境之一,或者 Cirrus 也可以使用用户创建的 VM 或 Docker 容器映像。

您可以在 pg-vm-images 存储库中找到 Postgres 使用的 VM 和容器映像。尽管 Cirrus CI 已经提供了 Windows 容器,但您可能需要在映像上安装和配置许多不同的东西。在 MinGW 的情况下,需要一个 Windows Docker 映像,其中包含按本博客文章前面部分所述安装的 MinGW。您可以找到添加此类 Windows 映像的 PR。

合并准备 VM 或容器映像的 PR 后,您可以进入下一步:将脚本添加到 cirrus.yml 文件。我们已经有了用于 MinGW 构建的配置和构建命令。

首先,您需要创建一个新任务并指定新任务将使用您添加到 pg-vm-images 中的容器。

task:name: Windows - Server 2019, MinGW64windows_container:image: $CONTAINER_REPO/windows_ci_mingw64:latest 

Cirrus 有一个名为 CIRRUS_WORKING_DIR 的环境变量,它是 Cirrus 运行的目录。在此路径下,指定 BUILD_DIR 变量作为 Postgres 的构建目录。

env:BUILD_DIR: "%CIRRUS_WORKING_DIR%/build" 

然后,您可以将配置、构建和测试脚本添加到新任务中。

configure_script:- C:\msys64\usr\bin\dash.exe -lc "mkdir %BUILD_DIR% &&cd %BUILD_DIR% &&%CIRRUS_WORKING_DIR%/configure--enable-cassert--enable-debug--with-icu--with-libxml--with-libxslt--with-lz4build_script:C:\msys64\usr\bin\dash.exe -lc "cd %BUILD_DIR% && make world-bin"tests_script:- C:\msys64\usr\bin\dash.exe -lc "cd %BUILD_DIR% && make check-world TMPDIR=%BUILD_DIR%/tmp_install" 

最后,您可能需要添加 on_failure 指令来告诉发生故障时该怎么做。您可以简单地使用 Autoconf 调用任务的现有 on_failure_ac 配置。

on_failure:<<: *on_failure_ac 

完成所有这些步骤后,您现在可以提交并将更改推送到 cirrus.yml 文件上。Cirrus CI 将通过 MinGW 识别您的新任务。您应该看到新的 MinGW 任务将在 Cirrus CI 上运行。

在 Cirrus CI 上运行的 CI 任务,包括最近添加的 MinGW 任务


使用 Postgres CI 并为其做出贡献使我们所有 PG 开发人员的生活变得更轻松

将 MinGW 添加到 Postgres 的 CI 中的这项工作是我对 Postgres 的第一个补丁。(尚未提交,但正在接受审核。)您可以查看补丁以了解有关如何将新任务添加到 CI 中的更多信息。

这篇博文向您展示了如何使用 Postgres 的 CI 并为其做出贡献,以及如何使用 MinGW 构建 Postgres。为您的分支启用 Cirrus CI 将帮助您查看针对 Postgres 更改的测试结果。为 Postgres CI 做出贡献是让 Postgres 变得更好的好方法,特别是当您需要比现有更多的环境或操作系统时。

这篇关于PostgreSQL的学习心得和知识总结(一百四十二)|深入理解PostgreSQL数据库数据库之 Continuous Integration的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/979009

相关文章

关于C++中的虚拟继承的一些总结(虚拟继承,覆盖,派生,隐藏)

1.为什么要引入虚拟继承 虚拟继承是多重继承中特有的概念。虚拟基类是为解决多重继承而出现的。如:类D继承自类B1、B2,而类B1、B2都继承自类A,因此在类D中两次出现类A中的变量和函数。为了节省内存空间,可以将B1、B2对A的继承定义为虚拟继承,而A就成了虚拟基类。实现的代码如下: class A class B1:public virtual A; class B2:pu

十五.各设计模式总结与对比

1.各设计模式总结与对比 1.1.课程目标 1、 简要分析GoF 23种设计模式和设计原则,做整体认知。 2、 剖析Spirng的编程思想,启发思维,为之后深入学习Spring做铺垫。 3、 了解各设计模式之间的关联,解决设计模式混淆的问题。 1.2.内容定位 1、 掌握设计模式的"道" ,而不只是"术" 2、 道可道非常道,滴水石穿非一日之功,做好长期修炼的准备。 3、 不要为了

[职场] 公务员的利弊分析 #知识分享#经验分享#其他

公务员的利弊分析     公务员作为一种稳定的职业选择,一直备受人们的关注。然而,就像任何其他职业一样,公务员职位也有其利与弊。本文将对公务员的利弊进行分析,帮助读者更好地了解这一职业的特点。 利: 1. 稳定的职业:公务员职位通常具有较高的稳定性,一旦进入公务员队伍,往往可以享受到稳定的工作环境和薪资待遇。这对于那些追求稳定的人来说,是一个很大的优势。 2. 薪资福利优厚:公务员的薪资和

关于如何更好管理好数据库的一点思考

本文尝试从数据库设计理论、ER图简介、性能优化、避免过度设计及权限管理方面进行思考阐述。 一、数据库范式 以下通过详细的示例说明数据库范式的概念,将逐步规范化一个例子,逐级说明每个范式的要求和变换过程。 示例:学生课程登记系统 初始表格如下: 学生ID学生姓名课程ID课程名称教师教师办公室1张三101数学王老师101室2李四102英语李老师102室3王五101数学王老师101室4赵六103物理陈

数据库期末复习知识点

A卷 1. 选择题(30') 2. 判断范式(10') 判断到第三范式 3. 程序填空(20') 4. 分析填空(15') 5. 写SQL(25') 5'一题 恶性 B卷 1. 单选(30') 2. 填空 (20') 3. 程序填空(20') 4. 写SQL(30') 知识点 第一章 数据库管理系统(DBMS)  主要功能 数据定义功能 (DDL, 数据定义语

给数据库的表添加字段

周五有一个需求是这样的: 原来数据库有一个表B,现在需要添加一个字段C,我把代码中增删改查部分进行了修改, 比如insert中也添入了字段C。 但没有考虑到一个问题,数据库的兼容性。因为之前的版本已经投入使用了,再升级的话,需要进行兼容处理,当时脑子都蒙了,转不过来,后来同事解决了这个问题。 现在想想,思路就是,把数据库的表结构存入文件中,如xxx.sql 实时更新该文件: CREAT

回调的简单理解

之前一直不太明白回调的用法,现在简单的理解下 就按这张slidingmenu来说,主界面为Activity界面,而旁边的菜单为fragment界面。1.现在通过主界面的slidingmenu按钮来点开旁边的菜单功能并且选中”区县“选项(到这里就可以理解为A类调用B类里面的c方法)。2.通过触发“区县”的选项使得主界面跳转到“区县”相关的新闻列表界面中(到这里就可以理解为B类调用A类中的d方法

人工智能机器学习算法总结神经网络算法(前向及反向传播)

1.定义,意义和优缺点 定义: 神经网络算法是一种模仿人类大脑神经元之间连接方式的机器学习算法。通过多层神经元的组合和激活函数的非线性转换,神经网络能够学习数据的特征和模式,实现对复杂数据的建模和预测。(我们可以借助人类的神经元模型来更好的帮助我们理解该算法的本质,不过这里需要说明的是,虽然名字是神经网络,并且结构等等也是借鉴了神经网络,但其原型以及算法本质上还和生物层面的神经网络运行原理存在

Java注解详细总结

什么是注解?         Java注解是代码中的特殊标记,比如@Override、@Test等,作用是:让其他程序根据注解信息决定怎么执行该程序。         注解不光可以用在方法上,还可以用在类上、变量上、构造器上等位置。 自定义注解  现在我们自定义一个MyTest注解 public @interface MyTest{String aaa();boolean bbb()

SQL Server中,查询数据库中有多少个表,以及数据库其余类型数据统计查询

sqlserver查询数据库中有多少个表 sql server 数表:select count(1) from sysobjects where xtype='U'数视图:select count(1) from sysobjects where xtype='V'数存储过程select count(1) from sysobjects where xtype='P' SE