postgresql - 如何使用脚本 [CI/CD] 在 Kubernetes 中更新 postgres 数据库?
问题描述
我有一个部署在 kubernetes 中的 postgres 数据库,连接到 pvc [使用RWX访问模式]。通过我的 CI/CD 更新(创建表)数据库而不是登录到 pod 并运行查询 [不删除 pvc] 的正确方法是什么?
解决方案
我的理解是,您提出问题的背景原因是如何以最少的停机时间将数据库结构更改数据库部署到生产中。为此,我会选择Blue Green Deployments 1。
在您发表评论后,我假设您已经运行了 PostgreSQL 实例,并且希望通过直接在“磁盘”(在本例中为 PVC)上更改文件结构来修改数据库的内容。
如果我们谈论数据完整性等,直接在磁盘上修改数据结构并不是最好的主意。
本文第2条解释了该声明的原因。它描述了 postgreSQL 如何准确地将数据存储在磁盘上。
PostgreSQL(默认情况下)将数据块(PostgreSQL 称为页面)以 8k 块写入磁盘。
此外,table 和 file_path 之间存在关系,因此 postgresql 知道哪个文件存储了哪个 table。
SELECT pg_relation_filepath('test_data');
pg_relation_filepath
----------------------
base/20886/186770
在本例中,文件/database/base/20866/186770
包含表的实际数据test_data
。
更新数据库而不是登录到 pod 并运行查询的正确方法是什么
但是,如果您确定您有完整的文件集供数据库操作(例如您在 pg_dump / pg_restore 期间使用的文件),您可以尝试将该数据放在另一个 PVC 上并重新创建 pod,但这仍然会导致停机.
希望有帮助。
推荐阅读
- python - 检查行是否包含在 CSR 矩阵中
- javascript - 在 vue.js 的上下文中,当资源无法从 mustache 中的 API 加载时如何不显示任何内容
- javascript - Laravel 文件/文件夹未显示在公共目录中
- android - 如何从 WebView 的 HTML 页面访问外部存储?
- libgdx - libgdx MeshBuilder - 为什么不推荐使用这么多方法?
- c# - 闪屏后出现白屏
- reactjs - 'ApolloProvider' 不是从 React 中的'apollo-client' 导出的
- python - 如何突出显示特定工作日(周六和周日)的带有垂直颜色条的绘图线图?
- java - Spring Cloud Kubernetes 应用程序在 Pod 中运行时未检测到
- tensorflow - 训练 yolov3 时出错:- ValueError: tf.function-decorated 函数试图在非第一次调用时创建变量