小编Kir*_*bal的帖子

如何在pg_restore期间阻止物化视图刷新?

我使用"自定义"格式(-Fc)的pg_dump创建了数据库转储.此格式允许使用"jobs"选项(-j8)调用pg_restore.作业选项启动8个进程,并在10分钟内恢复数据库中的绝大多数关系.

我留下了4个进程.其中一个是物化视图的刷新,另外三个是应用于物化视图用作数据源的3个表的索引.索引根据pg_stat_activity"等待",可能是因为REFRESH物化视图仍在访问源表.

索引到位后,视图的刷新只需几分钟.因为索引在这期间没有到位,所以REFRESHREFRESH在17小时后关闭了这个过程,这使得pg_restore失败了.

我怎么能够

  1. 强制项的顺序,以便首先创建索引
  2. 关闭实体化视图的刷新并稍后手动完成
  3. 以自定义格式操作转储文件以说"没有数据"
  4. 拦截REFRESH MATERIALIZED VIEW声明并将其扔进垃圾桶

或任何其他完成工作的解决方案?

postgresql materialized-views postgresql-9.3

23
推荐指数
2
解决办法
4196
查看次数

用lag(N)值填充NULL列值

我有一个简单的表,该表缺少“某人”列的值。我想用id字段中的升序值填充先前值的NULL值,而不是降序值(过去的项目可能有所不同)。为了进行实验(我的实际查询要复杂得多),我不能简单地使用UPDATE查询来填充表,我必须将它作为SELECT来进行。

CREATE TABLE lag_test (id serial primary key, natural_key integer, somebody text);

INSERT INTO lag_test(natural_key, somebody)
VALUES (1, NULL), (1, 'Kirk'), (1, NULL), (2, 'Roybal'), (2, NULL), (2, NULL);
Run Code Online (Sandbox Code Playgroud)

示例代码创建一个像这样的表:

id  natural_key  somebody
--  -----------  --------
1   1            NULL
2   1            Kirk
3   1            NULL
4   2            Roybal
5   2            NULL
6   2            NULL
Run Code Online (Sandbox Code Playgroud)

到目前为止,我有这个:

SELECT id,
       natural_key,
       COALESCE(somebody, lag(somebody) OVER (PARTITION BY natural_key)) somebody
FROM lag_test
ORDER BY natural_key, id;
Run Code Online (Sandbox Code Playgroud)

哪个返回:

id  natural_key  somebody
--  -----------  --------
1   1 …
Run Code Online (Sandbox Code Playgroud)

sql postgresql postgresql-9.3

5
推荐指数
1
解决办法
2190
查看次数

如何从shell获取准确的命令行字符串?

我知道$*,$@,"$@"甚至${1+"@"}和他们的意思.

我需要从shell脚本访问EXACT命令行参数字符串.请注意示例中的引号.像"$ @"这样的东西保存参数但删除了引号,我看不出如何从中恢复.

例:

./my-shell.sh"1 2"3

我需要检索EXACT参数字符串而不进行任何处理:

"1 2"3

知道怎么做到这一点?

shell parsing arguments

3
推荐指数
1
解决办法
483
查看次数