问题标签 [postgresql-9.3]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
postgresql - 刷新物化视图:并发、事务行为
PostgreSQL 9.3 的官方文档REFRESH MATERIALIZED VIEW
还没有详细描述它。
此博客的引述:
Postgres 9.3 中的物化视图有一个严重的限制,即在刷新时使用排他锁。这基本上阻止了在使用来自其父关系的新数据进行刷新时读取物化视图的任何尝试
邮件列表中帖子的另一句话:
如果我理解正确,即使视图已经包含数据,REFRESH MATERIALIZED VIEW 也会使用 AccessExclusiveLock 锁定物化视图。
我的问题:以下顺序是否正确:
- 查询正在访问物化视图
- 一个作业执行
REFRESH MATERIALIZED VIEW
。它在视图上加锁,并等待所有使用 matview 运行的查询都完成 - matview 正在开始刷新;如果 matview 上有索引,它会同时更新(因此完全刷新发生在一个事务中)
- 使用 matview 的查询正在等待刷新完成。如果这花费的时间太长,则会出现“等待锁定超时错误”之类的东西。
- 刷新完成,解除锁定
- 一直在等待matview的查询继续
arrays - 在 Postgres JSON 数组中查询
您将如何搜索存储在json
列中的数组中的元素? (更新:另请参阅 9.4 更新的jsonb
列答案。)
如果我有一个这样的 JSON 文档,存储在一个json
名为的列中blob
:
我想做的是:
并取出所有匹配的行。但这不起作用,因为"blob"->'ids'
返回 JSON 值,而不是 Postgres 数组。
如果可能的话,我还想在各个 ID 上建立一个索引。
postgresql - 刷新物化视图不包括添加的列
从手册
CREATE MATERIALIZED VIEW 与 CREATE TABLE AS 类似,不同之处在于它还记住了用于初始化视图的查询,以便以后可以根据需要对其进行刷新。
据我了解,刷新物化视图应该与 re 具有相同的效果create view as
。但这不是这里发生的事情。
创建具有单列的表
创建物化视图
现在将一列添加到源表中
然后物化视图被刷新
新专栏在哪里?这是预期的行为吗?如果是,那么我认为该手册具有误导性。
postgresql - 为什么我的 postgresql 找不到我的主机
我的服务器是 Debian 7,我使用的是 PostgreSQL 9.3。
这是我的hosts文件:</p>
当我想启动一个新的psql控制台时:
可以看到机器找不到了localhsot.localdomain
。但是我更改了根文件,并在我的/etc/hosts
文件中使其正确并已经重新启动。
postgresql - 如何内省物化视图
我有一个实用程序,可以使用以下方法自省表列:
如何将其扩展到内省物化视图的列?
sql - 在触发器函数中没有选择表的权限
我得到了使用这个 PostgreSQL 代码创建的数据库“比基尼环礁”:
现在我想让我的(Common-LISP)程序做一个简单的插入:
这基本上是一个:
作为用户 testuser (我怀疑这是一个特定于程序语言的问题,以及我的一些糟糕的数据库/触发器设计)。
但是(出乎意料的)结果是:
这表明 testuser 还需要SELECT
触发器可能在其上执行操作的任何表的权限,这似乎有点奇怪,因为我认为视图的主要原因之一是限制/过滤用户对表的访问,这将与授予SELECT
一致性触发器所需的任何内容相反。
如何修复/防止这种初露端倪的许可破坏?
postgresql-9.3 - “pg_hba.conf”文件是否必须手动修改?
我一直在开发一个独立的应用程序(我的意思是我需要将应用程序单独安装到所有客户端工作站。)它与 PostgreSQL 数据库一起工作。起初,数据库和我的应用程序在同一台机器上。但是,在有了工作原型之后,我将数据库迁移到服务器(在不同的机器上)。第一次运行我的应用程序时,我没有成功连接到数据库,并通过修改pg_hba.conf
文件来解决这个问题,以便客户端工作站可以成功连接。下面是一个例子:
我做了更多这样的事情,并且列表正在稳步增长,这是应该的。我想知道是否(我相信应该有)一种更简单或更“整洁”的方式来执行此操作,以便每次将新客户端添加到系统时我都不必手动修改此文件。
感谢您宝贵的时间,
arrays - 将数组数组作为参数传递给函数
Web 应用程序可以发送到array of arrays
类似的函数
外部数组长度为n > 0
。中间数组的长度是恒定的,在本例中为 2。内部数组长度为n >= 0
.
我可以这样构建它:
但我想我可以像这样做得更好
请注意, atext array
被传递,然后在函数内部“强制转换”。这是必要的,因为 Postgresql 只能处理匹配维度的数组,而传递的内部数组的维度可能会有所不同。我可以在传递之前通过添加一些特殊值(例如零)来“修复”它们,以使它们的长度与最长的长度相同,但我认为在函数内部处理它更干净。
我错过了什么吗?这是最好的方法吗?
sql - Left Join 横向和数组聚合
我正在使用 Postgres 9.3。
我有两个表T1
和它们之间T2
的n:m
关系T1_T2_rel
。现在我想创建一个视图,除了 T1 的列之外,还提供一个列,对于 T1 中的每条记录,该列包含一个包含 T2 的所有相关记录的主键 ID 的数组。如果 T2 中没有相关条目,则该列的相应字段应包含空值。
我的架构的抽象版本如下所示:
相应的样本数据可以生成如下:
到目前为止,我提出了以下查询:
这行得通。但是,可以简化吗?
可以在此处找到相应的小提琴:sql-fiddle。不幸的是,sql-fiddle 不支持横向连接所需的 Postgres 9.3(尚)。
[更新]正如已经指出的那样,left join
原则上简单地使用子查询就足够了。但是,如果我比较查询计划,Postgres 会在使用 a 时对聚合表进行顺序扫描,left join
而在left join lateral
.
sql - 查询 JSON 列中的数组元素
最近升级到使用 PostgreSQL 9.3.1 以利用 JSON 功能。在我的表中,我有一个 json 类型的列,其结构如下:
出于问题的目的,这只是虚拟数据。
是否可以根据 id 查询 emails 数组中的特定项目?
差不多:“返回 id=123 的电子邮件)”?