标签: postgresql

Postgres 卡在恢复模式

我有一个处于恢复模式的 PostgreSQL 独立实例。一直在说

2014-03-24 18:45:57 MDT FATAL:  the database system is starting up
Run Code Online (Sandbox Code Playgroud)

几个小时,并ps显示:

postgres  2637  0.1  0.1 116916  4420 ?        Ds   15:43   0:18 postgres: startup process   recovering 00000001000000040000007E
Run Code Online (Sandbox Code Playgroud)

有没有办法观察恢复的进度,最好是使用 ETA?我怎样才能让这个过程“解除卡住”?

我可以使用标准的启动/停止脚本停止 postgres,但是当我再次启动它时,它仍然停留在恢复模式。

Debian 7.4、Linux 内核 3.2.0、PostgreSQL 9.1.12


的输出strace -p 2637

Process 2637 attached - interrupt to quit
close(154)                              = 0
getppid()                               = 2600
open("pg_clog/0003", O_RDWR|O_CREAT, 0600) = 154
lseek(154, 221184, SEEK_SET)            = 221184
write(154, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 8192) = 8192
fsync(154)                              = 0
Run Code Online (Sandbox Code Playgroud)

上面的输出似乎无限重复。


一个 gdb 回溯(随后的三个 …

postgresql recovery

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

更新另一个表中的所有列

我需要从另一个表更新一个表,我需要更新所有列。除了列出SET子句中的每一列之外,有没有办法一次更新它们?像这样:

update tableA
set * = tableB.*
from tableB where tableA.id = tableB.id
Run Code Online (Sandbox Code Playgroud)

我在 psql 中尝试过,它不起作用。我必须像这样列出每一列:

update tableA
set c1 = tableB.c1, c2 = tableB.c2, ...
from tableB where tableA.id = tableB.id
Run Code Online (Sandbox Code Playgroud)

tableB创建使用create .. like tableA. 所以它们基本上是相同的。我这样做的原因是我需要将 .csv 数据加载到临时表tableB,然后tableA根据.csv 中的新数据进行更新tableBtableA需要尽量少加锁,tableA需要保持完整性。我不确定“删除然后插入”是否是一个不错的选择?

postgresql update

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

Postgres:如何插入带有自动增量 ID 的行

有一个表“上下文”。有一个自动增量 ID“context_id”。我正在使用序列来检索下一个值。

SELECT nextval('context_context_id_seq')
Run Code Online (Sandbox Code Playgroud)

结果是:1, 2, 3,...20....

但是“上下文”表中有 24780 行

如何获得下一个值 (24781)?

我需要在 INSERT 语句中使用它

postgresql insert auto-increment select

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

Postgresql:设置默认的 psql 客户端编码

当我使用 连接到 Postgresql 数据库时psql,我经常收到以下消息:

=> SELECT * FROM question_view ;
ERROR:  character with byte sequence 0xd7 0x9e in encoding "UTF8" has no equivalent in encoding "LATIN1"
Run Code Online (Sandbox Code Playgroud)

按照这个SO answer,我知道我应该相应地更改客户端编码:

SET client_encoding = 'UTF8';
Run Code Online (Sandbox Code Playgroud)

client_encoding每次连接到数据库时更改都很麻烦。有没有办法在.pgpass文件中或其他任何地方永久配置此设置?

postgresql psql configuration encoding

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

如何调试空闲查询?

我有一个批处理查询,我每天都在我的数据库上运行。但是,它似乎陷入了空闲状态,而且我在调试发生的事情时遇到了很多困难。

查询是同时插入的表上的聚合,我猜这与该问题有某种关系。(聚合基于前几天的数据,因此插入不应影响结果。)

线索

  1. 我正在使用 sqlalchemy 在 python 脚本中运行它。但是,我已将事务级别设置为自动提交,因此我不认为事务已包含在事务中。另一方面,当我在 sql 终端中手动运行查询时,我没有看到查询挂起。

  2. 通过查询pg_stat_activity,查询最初作为state='active'. 大约 15 秒后,状态更改为“空闲”,此外,xact_start设置为NULL。等待标志永远不会设置为 true。

  3. 在我弄清楚 sqlalchemy 的事务级别自动提交之前,它会挂在 state'idle in transaction'而不是'idle'. 自从进行更改后,它的挂起频率可能会稍微降低?

我觉得我没有能力对此进行更深入的挖掘。任何反馈,甚至在没有给出明确答案的情况下解释更多关于不同状态和相关 postgres 内部的信息,都将不胜感激。

postgresql postgresql-9.3

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

为什么新用户可以在 PostgreSQL 中创建表?

我按照两个教程创建了一个数据库:

  1. 一个完全特权的用户链接
  2. 只读用户链接

然后我从CJ Estel 的教程中得到了一条提示,指出“即使我们从未明确将其提供给我们的新用户,您也可能继承了创建表的能力”。果然,只读用户能够创建和拥有表!

CJ Estel 很好地指出了根本原因,即模板数据库。但是,创建表格的能力破坏了您通过谷歌搜索“只读用户 postgres”获得的大多数教程,包括在 postgresql.org 上托管的教程。您的用户拥有的不仅仅是只读权限!

为什么新用户有这种能力?撤销此权限后,该用户的数据库是否真的是只读的?

postgresql permissions

13
推荐指数
1
解决办法
2541
查看次数

重命名表后,postgresql 重命名外键

我重命名了一个表,显然其中的外键没有改变,并导致问题,尽管当\d error我得到:
"error_test_id_fkey" FOREIGN KEY (test_id) REFERENCES test(id) ON DELETE CASCADE

error名字唯一的关系是名字(奇怪)

无论如何 - 我删除外键并重新创建它没有问题,但我不知道该怎么做

postgresql

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

PostgreSQL 上只读单表访问的最小授权

以下是似乎可用于创建新用户(登录)并授予对 PostgreSQL 上指定表的只读访问权限的命令列表。

让我们假设这些命令是在具有足够权限的登录时执行的(即postgres在默认安装中登录)。

CREATE ROLE user_name NOSUPERUSER NOCREATEDB 
NOCREATEROLE NOINHERIT LOGIN PASSWORD 'pwd' VALID UNTIL 'infinity';
Run Code Online (Sandbox Code Playgroud)

现在我想在 database上授予select表,所以在这里(通过 PgAdmin 或类似的方式将数据库选为当前数据库):tab_abcdb_xyzdb_xyz

grant select on tab_abc to user_name;
Run Code Online (Sandbox Code Playgroud)

问题是:这是否足够,还是应该有更多的资助(数据库connectusage也许)?

这些命令似乎对我有用,但我的默认安装具有默认安全设置。如果服务器管理员配置了更强的安全性,我应该添加哪些额外的授权?

似乎我不需要授予connectusage- 在授予时是隐含的select吗?总是这样吗?

postgresql permissions

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

是否建议将扩展安装到 pg_catalog 架构中?

由于pg_catalog架构中的对象隐含在search_path( docs ) 中,是否建议在该架构中安装扩展?

postgresql best-practices postgresql-9.4 postgresql-extensions

13
推荐指数
2
解决办法
9536
查看次数

添加子查询时,PostgreSQL 查询速度非常慢

我对一个有 1.5M 行的表有一个相对简单的查询:

SELECT mtid FROM publication
WHERE mtid IN (9762715) OR last_modifier=21321
LIMIT 5000;
Run Code Online (Sandbox Code Playgroud)

EXPLAIN ANALYZE 输出:

Limit  (cost=8.84..12.86 rows=1 width=8) (actual time=0.985..0.986 rows=1 loops=1)
  ->  Bitmap Heap Scan on publication  (cost=8.84..12.86 rows=1 width=8) (actual time=0.984..0.985 rows=1 loops=1)
        Recheck Cond: ((mtid = 9762715) OR (last_modifier = 21321))
        ->  BitmapOr  (cost=8.84..8.84 rows=1 width=0) (actual time=0.971..0.971 rows=0 loops=1)
              ->  Bitmap Index Scan on publication_pkey  (cost=0.00..4.42 rows=1 width=0) (actual time=0.295..0.295 rows=1 loops=1)
                    Index Cond: (mtid = 9762715)
              ->  Bitmap Index Scan on …
Run Code Online (Sandbox Code Playgroud)

postgresql performance subquery hibernate query-performance

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