小编kli*_*lin的帖子

使用规则或通知自动刷新实例化视图

我在PostgreSQL 9.3数据库上有一个物化视图,该数据库很少发生变化(大约每天两次).但是当它发生时,我想及时更新其数据.

以下是我到目前为止的想法:

有一个物化视图mat_view,它从表中获取数据table1table2使用一些连接语句.

无论何时进入table1table2更改,我已经有一个触发器更新一个config由...组成的配置表

table_name | mat_view_name | need_update
-----------+---------------+------------
table1     | mat_view      | TRUE/FALSE
table2     | mat_view      | TRUE/FALSE
Run Code Online (Sandbox Code Playgroud)

因此,如果有任何table1更改(每个语句的UPDATE和DELETE都有触发器),need_update则第一行中的字段设置为TRUE.同样适用table2于第二行.

显然,如果need_update为TRUE,则必须刷新实体化视图.

更新:由于物化视图不支持规则(如下面评论中提到的@pozs),我会更进一步.我创建了一个v_mat_view带有定义" SELECT * FROM mat_view" 的虚拟视图.当用户在此视图上执行SELECT时,我需要创建一个ON SELECT规则,它执行以下操作:

  • 检查是否mat_view应该更新(SELECT 1 FROM config WHERE mat_view_name='mat_view' AND need_update=TRUE)
  • 用...重置need_update标志UPDATE config SET need_update=FALSE where mat_view_name='mat_view'
  • REFRESH MATERIALIZED VIEW …

postgresql triggers materialized-views postgresql-9.3

60
推荐指数
2
解决办法
4万
查看次数

在PostgreSQL的范围内获取日期列表

我想在PostgreSQL数据库中获取两个日期(包括它们)之间的日期列表.例如,如果我有:

  • 开课日期:2012年6月29日
  • 截止日期:2012年7月3日

那么结果应该是:

29 june 2012
30 june 2012 
1 july 2012 
2 july 2012 
3 july 2012
Run Code Online (Sandbox Code Playgroud)

在PostgreSQL中执行此操作的最佳方法是什么?

谢谢.

sql postgresql date date-comparison

57
推荐指数
5
解决办法
4万
查看次数

Postgres - 将两列聚合成一个项目

我想在分组时将两列聚合成一个"数组".

假设一个像这样的表:

friends_map:
=================================
user_id    friend_id    confirmed
=================================
1          2            true
1          3            false
2          1            true
2          3            true
1          4            false
Run Code Online (Sandbox Code Playgroud)

我想从user_id中选择此表和group并获取friend_id并确认为以逗号分隔的连接值.

目前我有这个:

SELECT user_id, array_agg(friend_id) as friends, array_agg(confirmed) as confirmed
FROM friend_map
WHERE user_id = 1
GROUP BY user_id
Run Code Online (Sandbox Code Playgroud)

这让我:

=================================
user_id    friends      confirmed
=================================
1         [2,3,4]       [t, f, f]
Run Code Online (Sandbox Code Playgroud)

我怎样才能得到:

=================================
user_id    friends     
=================================
1         [ [2,t], [3,f], [4,f] ]
Run Code Online (Sandbox Code Playgroud)

sql arrays postgresql aggregate-functions

27
推荐指数
4
解决办法
2万
查看次数

插入数组值

如何编写和执行使用libpqxx插入数组值的查询?

INSERT INTO exampleTable(exampleArray[3]) VALUES('{1, 2, 3}');
Run Code Online (Sandbox Code Playgroud)

这个示例代码给了我:

ERROR:  syntax error at or near "'"
Run Code Online (Sandbox Code Playgroud)

怎么了?在PostgreSQL文档中,我发现:

CREATE TABLE sal_emp (
name            text,
pay_by_quarter  integer[],
schedule        text[][]
); 
Run Code Online (Sandbox Code Playgroud)

...

INSERT INTO sal_emp
VALUES ('Bill',
'{10000, 10000, 10000, 10000}',
'{{"meeting", "lunch"}, {"training", "presentation"}}');
Run Code Online (Sandbox Code Playgroud)

arrays postgresql

26
推荐指数
2
解决办法
4万
查看次数

PostgreSQL:如何在没有指定参数的情况下删除函数?

我可以成功创建一个函数如下:

CREATE FUNCTION Foo(MY_Value INT) RETURNS INT
AS 'SELECT 2 + MY_Value'
LANGUAGE SQL
Run Code Online (Sandbox Code Playgroud)

但是,如果我首先要检查函数是否存在然后删除它,那么我必须指定以下内容:

DROP FUNCTION IF EXISTS Foo(My_Value INT);
Run Code Online (Sandbox Code Playgroud)

在不指定输入参数的情况下,以下内容返回错误,指出"NOTICE:function foo()不存在,跳过"

DROP FUNCTION IF EXISTS Foo();
Run Code Online (Sandbox Code Playgroud)

与MySQL类似,有没有办法在PostgreSQL中删除FUNCTION而无需为函数指定参数?换句话说,在MySQL语句中是否存在以下等价物(即,在不指定输入参数的情况下删除存储过程)?

DROP PROCEDURE IF EXISTS Foo;
Run Code Online (Sandbox Code Playgroud)

mysql postgresql plpgsql

25
推荐指数
2
解决办法
3万
查看次数

jsonb字段中的PostgreSQL重命名属性

在postgresql 9.5中,有没有办法在jsonb字段中重命名属性?

例如:

{ "nme" : "test" }
Run Code Online (Sandbox Code Playgroud)

应该重命名为

{ "name" : "test"}
Run Code Online (Sandbox Code Playgroud)

postgresql json jsonb postgresql-9.5

21
推荐指数
3
解决办法
5669
查看次数

运算符不存在:json = json

当我尝试从表中选择一些记录时

    SELECT * FROM movie_test WHERE tags = ('["dramatic","women", "political"]'::json)
Run Code Online (Sandbox Code Playgroud)

sql代码抛出错误

LINE 1: SELECT * FROM movie_test WHERE tags = ('["dramatic","women",...
                                        ^
HINT:  No operator matches the given name and argument type(s). You might      need to add explicit type casts.

********** ?? **********

ERROR: operator does not exist: json = json
SQL ??: 42883
????:No operator matches the given name and argument type(s). You might need to add explicit type casts.
??:37
Run Code Online (Sandbox Code Playgroud)

我错过了什么或者我可以在哪里了解这个错误.

sql postgresql json jsonb postgresql-9.4

20
推荐指数
1
解决办法
2万
查看次数

Linux上PostgreSQL中的配置参数work_mem

我必须通过调整基本的PostgreSQL服务器配置参数来优化查询.在文档中,我遇到了work_mem参数.然后我检查了如何更改此参数会影响我的查询的性能(使用sort).我用各种work_mem设置测量了查询执行时间,非常失望.

我执行查询的表包含10,000,000行,并且有430 MB的数据要排序.(Sort Method: external merge Disk: 430112kB).

work_mem = 1MB,EXPLAIN输出是:

Total runtime: 29950.571 ms (sort takes about 19300 ms).
Sort  (cost=4032588.78..4082588.66 rows=19999954 width=8) 
(actual time=22577.149..26424.951 rows=20000000 loops=1)
                 Sort Key: "*SELECT* 1".n
                 Sort Method:  external merge  Disk: 430104kB
Run Code Online (Sandbox Code Playgroud)

work_mem = 5MB:

Total runtime: 36282.729 ms (sort: 25400 ms).
Sort  (cost=3485713.78..3535713.66 rows=19999954 width=8) 
      (actual time=25062.383..33246.561 rows=20000000 loops=1)
      Sort Key: "*SELECT* 1".n
      Sort Method:  external merge  Disk: 430104kB
Run Code Online (Sandbox Code Playgroud)

work_mem …

postgresql server-configuration postgresql-performance

16
推荐指数
1
解决办法
1万
查看次数

在postgresql中,如何在jsonb键上返回布尔值而不是字符串?

在下面的查询中,$ isComplete和$ isValid作为字符串返回.但是,它们保存为布尔值.如何获取要返回的这些字段的布尔表示?

query =
    "SELECT
        data #>> '{id}' AS id,
        data #>> '{name}' AS name,
        data #>> '{curator}' AS curator,
        data #>  '{$isValid}' as \"$isValid\",
        data #>  '{customer}' as customer,
        data #>  '{$createdTS}' as \"$createdTS\",
        data #>  '{$updatedTS}' as \"$updatedTS\",
        data #>  '{$isComplete}' as \"$isComplete\",
        (count(keys))::numeric as \"numProducts\"
    FROM
      appointment_intakes,
      LATERAL jsonb_object_keys(data #> '{products}') keys
    GROUP BY id"
Run Code Online (Sandbox Code Playgroud)

postgresql json jsonb

16
推荐指数
1
解决办法
9846
查看次数

Postgresql查询嵌套JSONB字段中的对象

我正在使用PostgreSQL 9.6,我有一个名为"ItemDbModel"的表,其中有两列如下:

No integer,
Content jsonb
Run Code Online (Sandbox Code Playgroud)

说我把很多记录像:

 "No": 2, {"obj":"x","Item": {"Name": "BigDog", "Model": "NamedHusky", "Spec":"red dog"}}
 "No": 4, {"obj":"x","Item": {"Name": "MidDog", "Model": "NamedPeppy", "Spec":"no hair"}}
 "No": 5, {"obj":"x","Item": {"Name": "BigCat", "Model": "TomCat", "Spec":"blue color"}}
Run Code Online (Sandbox Code Playgroud)

如何查询表格:

  1. 记录"Content.Item.Name"包含"Dog" "Content.Item.Spec"包含"red"的记录.
  2. "Content.Item.Name"包含"Dog" "Content.Item.Spec"的记录包含"red".
  3. 记录"Content.Item" 中的任何 json字段包含"dog"的位置.

并按"Content.Item.Name.length"排序?

谢谢!

postgresql json jsonb postgresql-9.6 postgresql-12

16
推荐指数
1
解决办法
9739
查看次数