刷新物化视图:并发、事务行为

2023-11-21

PostgreSQL 9.3 官方文档REFRESH MATERIALIZED VIEW尚未对其进行详细描述。

引述自此blog:

Postgres 9.3 中的物化视图有一个严重的限制,即在刷新它时使用独占锁。这基本上会阻止在使用来自其父关系的新数据刷新物化视图时读取物化视图的任何尝试

另一条引自帖子中的内容邮件列表:

如果我理解正确的话刷新物化视图会锁定 具有 AccessExclusiveLock 的物化视图,即使该视图已经存在 包含数据。

我的问题:以下顺序是否正确:

  1. 查询正在访问物化视图
  2. 作业执行REFRESH MATERIALIZED VIEW。它在视图上加锁,并等待所有使用 matview 运行的查询完成
  3. matview正在开始刷新;如果 matview 上有索引,则会同时更新(因此完整的刷新发生在一个事务中)
  4. 使用 matview 的查询正在等待刷新完成。如果这花费的时间太长,就会出现“等待锁定超时错误”之类的情况。
  5. 刷新完成,锁解除
  6. 一直在等待 matview 的查询继续

自 Postgres 9.4 发布以来,情况并非完全如此。您现在可以使用以下命令同时刷新物化视图REFRESH MATERIALIZED VIEW CONCURRENTLY命令。从功能上讲,这会刷新视图,但不需要读锁。就计算而言,这是一个更昂贵的操作,但如果锁对您来说是一个问题(就像对我来说,这导致我走上这条路),那么这不是一个坏方法。

以下是发行说明中的​​更多信息:https://wiki.postgresql.org/wiki/What%27s_new_in_PostgreSQL_9.4#REFRESH_MATERIALIZED_VIEW_CONCURRENTLY

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

刷新物化视图:并发、事务行为 的相关文章

  • Postgres 创建一个带有外键数组的表

    我正在制作一个名为 routes 的表 我希望它能够包含航班列表 航班详情请参阅航班表 我希望 航班 是航班表中的外键 ID 数组 所以 我有这个代码 CREATE TABLE routes id SERIAL PRIMARY KEY fl
  • 如何在 JSON Postgres 数据类型列中搜索特定字符串?

    我有一个名为params在名为的表中reports其中包含 JSON 我需要找到 JSON 数组中任何位置包含文本 authVar 的行 我不知道文本可能出现的路径或级别 我只想使用标准的 like 运算符搜索 JSON 就像是 SELEC
  • 如何在 Postgres 中将表从公共模式移动到其他模式

    Postgres 9 1 数据库包含公共模式中的表 yksus1 ykssu9 pgAdmin 显示了这些定义 如下面的代码所示 如何将这些表移至 Firma1 架构 Firma1 模式中的其他表具有对这些表主键的外键引用 对这些表的外键引
  • 如何使用diesel-rs选择色谱柱的子集?

    我现在花了几个小时的时间来查询表的可用列的子集以及在其中包含计算 我知道这不是在选择查询中执行计算的最佳方式 但现在 我只是在开发一个原型 它应该是可行的 我在用diesel rs作为后端实现中所有数据库操作的 ORM 数据将存储在 Pos
  • Postgresql:使用窗口函数限制组大小的分组

    Postgresql 中有没有一种方法可以编写一个查询 该查询根据具有限制的列对行进行分组 而不丢弃其他行 假设我有一个包含三列的表格id color score与以下行 1 red 10 0 2 red 7 0 3 red 3 0 4 b
  • 如何从 postgresql 获取 TEXT 列值

    我在 postgreSQL 中有一个以下简单的表 CREATE TABLE data id bigint NOT NULL text column text 正如我在 phpPgAdmin 网站中看到的那样 text column 的值是数
  • Ansible 创建可以访问所有表的 postgresql 用户?

    这应该很简单 我想要创建一个 Ansible 语句来创建一个 Postgres 用户 该用户具有特定数据库的连接权限以及对该特定数据库中所有表的选择 插入 更新 删除权限 我尝试了以下方法 name Create postgres user
  • 在 Mac 中运行 Postgresql:数据库“postgres”不存在 [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我按照这些说明让 postgresql 在 mac 上运行 请注意 我使用 Homebrew 进行安装 并且当前可通过brew安装的版本是 9 2 1
  • 从 INSERT 返回带有 ON CONFLICT 的行,无需更新

    我遇到的情况是 我经常需要从具有唯一约束的表中获取一行 如果不存在则创建它并返回 例如我的表可能是 CREATE TABLE names id SERIAL PRIMARY KEY name TEXT CONSTRAINT names na
  • 执行 INSERT into 数据库后如何获取插入行的 id?

    我正在使用 c 11 和 pqxx 访问 postgresql 数据库 我需要插入行的 id 和标志 如果成功与否 执行 INSERT into 数据库后如何获取插入行的 id 我试图在网上找到例子但没有成功 work txn conn t
  • Postgres 简单的“数据透视表”

    如果我有一个这样的数据表 name type count test blue 6 test2 red 3 test red 4 我怎样才能查询它以获得一个表 name num red num blue test 4 6 test2 3 0
  • SQL:每天选择最接近特定时间的一条记录

    我有一张表存储某个时间点的值 CREATE TABLE values value DECIMAL datetime DATETIME 每一天可能有多个值 也可能某一天只有一个值 现在我想获取给定时间跨度 例如一个月 内最接近一天中给定时间的
  • PostgreSQL:左外连接语法

    我正在使用 PostgreSQL 8 4 6 和 CentOS 5 5 并有一个用户表 select from pref users where id DE2 id first name last name female avatar ci
  • 如何查找 PostgreSQL 数据库的上次更新时间?

    我正在使用一个批量更新的 postgreSQL 数据库 我需要知道数据库 或数据库中的表 上次更新或修改的时间 两者都可以 我看到 postgreSQL 论坛上有人建议使用日志记录并查询日志 这对我不起作用 因为我无法控制客户端代码库 你可
  • postgres 有 CLOSEST 运算符吗?

    我正在寻找这样的东西 给定一个表格 id number 1 7 2 1 25 3 1 01 4 3 0 查询SELECT FROM my table WHEREnumberCLOSEST 1 将返回第 3 行 我只关心数字 现在我有一个程序
  • 插入多行并返回主键时 Sqlalchemy 的奇怪行为

    插入多行并返回主键时 我注意到一些奇怪的事情 如果我在 isert 查询中添加使用参数值 我会得到预期的行为 但是当将值传递给游标时 不会返回任何内容 这可能是一个错误还是我误解了什么 我的sqlachemy版本是0 9 4 下面如何重现错
  • 数据库错误:值对于类型字符变化来说太长(100)

    我有一个 Django 网站 运行我们几年前在内部构建的迷你 CMS 它使用 postgresql 保存简单的标题和一段文本时 出现以下错误 value too long for type character varying 100 奇怪的
  • 使用两个日期之间的随机日期时间更新每一行

    我有一个专栏叫date created我希望每一行保存一个随机日期 日期距当前时间为 2 天 我正在运行以下查询 但它会更新具有相同随机日期的所有行 我希望每一行都是随机的并且不相同 update table set date create
  • 如何在不运行 PostgreSQL 服务器的情况下初始化 PostgreSQL 数据库

    在初始化脚本中 我想初始化 PostgreSQL 目录 但在此阶段不需要 也不希望 正在运行的 PostgreSQL 服务器 如果我只是创建集群 作为用户postgres initdb D 但是 我还需要创建 PostgreSQL 角色 创
  • 使用 JSON 参数的 Postgres 批量 INSERT 函数

    这是一个plpgsqlpostgres 的函数9 6 它试图INSERT一行 如果插入没有失败 由于违反键约束 那么它会运行更多命令 CREATE FUNCTION foo int text text RETURNS void AS BEG

随机推荐

  • 宽度和高度会随方向变化吗?

    所以我的游戏从垂直方向开始 然后最终进入水平方向 我知道屏幕的宽度是屏幕的宽度 与垂直方向时的高度相同 当它切换到水平方向时 高度会变成宽度 宽度会变成高度吗 或者它们保持不变 是的 屏幕宽度和高度会根据设备方向而变化 您可以使用以下命令获
  • 如何在 C# 中将 UTC 时间转换为任何其他时区的时间

    我正在 C net 中工作 Net fx 是 2 0 不支持不同时区之间的转换 我已经编写了一个基于 UTC 的调度程序 但它在伦敦的 DTS 周期中给出了 1 小时的错误 我需要一些解决方案 以便我可以通过正确的 DST 调整来获得相对于
  • 将 int 转换为 4 字节 char 数组 (C)

    嘿 我希望将用户输入的 int 转换为 4 个字节 并将其分配给字符数组 如何才能做到这一点 Example 将用户输入 175 转换为 00000000 00000000 00000000 10101111 到目前为止所有答案都有问题 转
  • 查看单个文档中单个字段的原始 Solr 标记

    我正在调试我的 Solr 架构 我想查看标记特定字段的结果 举一个简化的例子 如果我有
  • sudo E选项不起作用? [关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 在我看来 如果我写一个shell脚本 HOME path to script myscript and export PATH PATH HOME path to script th
  • 在单活动架构中设置片段的横向方向

    如何实现只锁定一个屏幕方向Fragment 在单活动架构中 只有一个Activity对于整个应用程序 有没有比在每个中指定请求的方向更好的解决方案Fragment 我试图避免放置activity requestedOrientation A
  • 在 scrapy 中运行多个蜘蛛

    例如 在 scrapy 中 如果我有两个包含不同 HTML 的 URL 现在我想分别编写两个单独的蜘蛛 并希望同时运行这两个蜘蛛 在 scrapy 中可以同时运行多个蜘蛛 在scrapy中编写多个蜘蛛后 我们如何安排它们每6小时运行一次 可
  • 依赖于子目录同级的介子目标

    这是我的项目结构 include src abc include src def include src ghi include src vendor bar include src foo 16 directories 我想将我的构建移植
  • 如何从其他应用程序向 Microsoft 团队发布消息

    我正在尝试在我的桌面应用程序中创建一个自定义方法 使用 C 以向 Microsoft 团队发布消息 但我还是不知道用什么样的工具或者服务来完成 有可能实现吗 如果是 怎么办 我在 Visual Studio 中找到了一个有关 MS Team
  • 在 matplotlib 中重用 patch 对象而不移动它们的位置

    我想自动生成一系列被剪裁成补丁的图 如果我尝试重复使用补丁对象 它会在画布上移动位置 该脚本 基于 Yann 对之前问题的回答 演示了正在发生的情况 import pylab as plt import scipy as sp import
  • 需要使用 StreamReader.ReadLine() 获取行终止符

    我编写了一个 C 程序来读取 Excel xls xlsx 文件并输出为 CSV 和 Unicode 文本 我编写了一个单独的程序来删除空白记录 这是通过读取每一行来完成的StreamReader ReadLine 然后逐个字符地遍历字符串
  • 如何使用 jQuery 模拟打字?

    就像如何click 可以用来触发元素上的点击事件 有什么方法可以模拟字符串的输入吗 您可以根据需要使用这些事件 keydown keypress keyup
  • 将日期增加一个月

    假设我有以下格式的日期 2010 12 11 年 周一 使用 PHP 我希望将日期增加一个月 并且希望年份在必要时自动增加 即从 2012 年 12 月增加到 2013 年 1 月 Regards time strtotime 2010 1
  • PayPal REST API 返回信用卡令牌的 500 服务器错误

    我正在尝试让 PayPal REST api 使用存储在保险库中的信用卡创建付款 但是 每当我尝试使用金库中的卡进行付款时 PayPal 的 API 都会挂起大约半分钟 然后给出以下 500 错误 Exception Got Http re
  • 我在控制器中的辅助方法

    我的应用程序应该呈现 html 以便在用户单击 ajax 链接时进行响应 我的控制器 def create user user User new params if user save status success link link to
  • 在 Node.js 中使用 JSON.stringify 会导致“进程内存不足”错误

    使用 Node 我尝试从 LDAP 服务器收集用户数据 然后将该数据写入 JSON 文件 我使用以下代码来执行此操作 fs writeFile data json JSON stringify data null 4 问题是JSON str
  • iOS 8:键盘扩展。添加弹出按键的问题

    我正在构建我的键盘扩展应用程序 并且当用户点击按钮时 我在按钮上添加了按键弹出动画 它适用于内部图像 但对于顶行图像 弹出区域会在剪辑子视图时被隐藏 我尝试使用 ClipToBound 属性并将其设置为 False 但仍然不起作用 有人知道
  • javascript 在逗号后截断字符串

    我正在寻找一种方法来删除字符串中的逗号及其后面的所有内容 例如 重要 又不那么重要 我想删除 不太重要 有任何想法吗 提前致谢 你可以这样做substring and indexOf str str substring 0 str inde
  • 如何在 Sitecore 中关闭 XHTML 验证?

    如何在工作流程中关闭 Sitecore 6 5 XHTML 页面验证 我正在开发并在尝试发布测试页面时不断遇到问题 因为它们出错了 我更愿意在浏览器中将错误作为堆栈跟踪获取 我不确定在此之前我是否已更改某些内容 但我最近承担了一个将 Sit
  • 刷新物化视图:并发、事务行为

    PostgreSQL 9 3 官方文档REFRESH MATERIALIZED VIEW尚未对其进行详细描述 引述自此blog Postgres 9 3 中的物化视图有一个严重的限制 即在刷新它时使用独占锁 这基本上会阻止在使用来自其父关系