标签: postgresql

Postgresql:full_page_writes 如何帮助防止数据丢失?

来自postgresql 文档

需要[全页写入],因为操作系统崩溃期间正在进行的页面写入可能仅部分完成,导致磁盘上的页面包含新旧数据的混合。通常存储在 WAL 中的行级更改数据不足以在崩溃后恢复期间完全恢复此类页面。存储整页图像可以保证页面可以正确恢复...

为什么 WAL 日志不足以进行完整恢复?我的理解是它们包含自(至少)最后一个检查点以来的所有页面更新。

有人可以举例说明如何简单地重放上一个检查点的 WAL 日志仍然会导致数据丢失吗?

postgresql recovery

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

Postgresql 9.3 的模糊匹配

现在我正在使用 ts_rank (带有 ts_vector 和 ts_query)来搜索字符串的相关性。虽然到目前为止这对我来说做得很好。我希望在搜索过程中进行一些模糊的工作。

按照目前的情况,搜索是由用户输入其术语作为字符串来完成的,然后我将其解析为标记。然后将这些标记与字符串进行比较。我想做的是在这些查询中使用类似于 levenshtein 的东西,以允许也匹配较小的拼写错误。

例如,如果用户输入 rubico 而不是 rubicon,我仍然会得到匹配项(因为 rubico 与 rubicon 的距离仅为 1)。

这是否可能与 Postgres 的 ts_rank 功能有关,或者是否有其他选项允许文本搜索与 levenstheins 一起使用?

postgresql full-text-search

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

不允许以“root”身份执行 PostgreSQL 服务器

我以 root 身份运行此代码:

/usr/local/bin/postgres -D /usr/local/pgsql/data
Run Code Online (Sandbox Code Playgroud)

因为它要我来运行它

然而它给出了这个错误;

"root" execution of the PostgreSQL server is not permitted.
The server must be started under an unprivileged user ID to prevent
possible system security compromise. See the documentation for
more information on how to properly start the server.
Run Code Online (Sandbox Code Playgroud)

如何登录 PostgreSQL?不是可以用root用户使用吗?

一些注意事项:这是 FreeBSD 10 上的 PostgreSQL 9.4(测试版,但 9.3 给了我同样的错误)。PostgreSQL 是通过 Ports 安装的。我想我有一个“pgsql”用户,因为它说

===> Registering installation for postgresql94-server-9.4.b3
===> Creating users and/or groups.
Using existing group 'pqsql'.
Using existing user 'pqsql'.
Run Code Online (Sandbox Code Playgroud)

postgresql

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

MySQL 和 PostgreSQL 中的聚集索引性能考虑

在MySQL/InnoDB中,聚集索引与主键同义,因此选择一个差的主键会影响数据库性能,即使用UUID作为PK是数据库写入的性能杀手。

现在,在 PostgreSQL 中,不存在像 MySQL 中那样的集群限制。如果我选择UUID作为PK有什么影响?PostgreSQL 中是否也像 MySQL 一样存在数据库写入性能杀手?

mysql postgresql performance primary-key clustered-index

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

跨表唯一

我有一个包含用户的表。每个用户都有一个主电子邮件和一个指示该用户是否被删除的标志(我们从不硬删除用户)。

但是,每个用户还可以拥有额外的电子邮件。

无论如何,电子邮件地址必须是唯一的,我想在数据库级别强制执行这一点。对于主要电子邮件地址来说这很简单。我可以简单地添加一个带有WHERE not is_deleted限制的 UNIQUE 索引,以便可以重新使用已删除的用户的电子邮件。

然而,对于辅助电子邮件来说,这就更加棘手。

  • 如果我将它们存储在数组字段中的同一个表中,我可能不仅会失去对它们进行索引的能力(我们有超过 5 万的用户,并且需要能够通过电子邮件进行搜索,所以这是不行的),而且到目前为止据我所知,我也不能将唯一的索引/约束放入数组中。
  • 如果我使用一个单独的表(这显然更干净),我必须将is_deleted用户的标志复制到该表,这也很丑陋,但允许我简单地使用 UNIQUE 索引与WHERE not is_deleted.

有没有更好的解决方案来实现我想要做的事情?

postgresql foreign-key database-design constraint unique-constraint

5
推荐指数
2
解决办法
6460
查看次数

可扩展查询前 x 天内的事件运行计数

我已经在stackoverflow上发布了这个问题,但我想我可能会在这里得到更好的答案。
我有一个表存储用户发生的数百万个事件:

                                       Table "public.events"
   Column   |           Type           |                         Modifiers                         
------------+--------------------------+-----------------------------------------------------------
 event_id   | integer                  | not null default nextval('events_event_id_seq'::regclass)
 user_id    | bigint                   | 
 event_type | integer                  | 
 ts         | timestamp with time zone | 
Run Code Online (Sandbox Code Playgroud)

event_type 有 5 个不同的值、数百万用户以及每个用户每个 event_type 的不同事件数,通常范围为 1 到 50。

数据样本:

+-----------+----------+-------------+----------------------------+
| event_id  | user_id  | event_type  |         timestamp          |
+-----------+----------+-------------+----------------------------+
|        1  |       1  |          1  | January, 01 2015 00:00:00  |
|        2  |       1  |          1  | January, 10 2015 00:00:00  | …
Run Code Online (Sandbox Code Playgroud)

postgresql performance scalability window-functions postgresql-performance

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

Postgres 流复制:如何在故障转移后重新同步主服务器(与备用服务器)中的数据

我对 postgres 9.1 复制机制完全陌生。

我已经设法在主 postgres 和备用 postgres 之间设置流复制(两者都有 x 条记录)。当主服务器发生故障时,备用服务器会使用触发文件机制接管,并积累额外的数据(假设现在有 x+y 条记录)。

现在,当原始主服务器出现时,它仍然有 x 条记录(现在是新的主服务器)。有没有办法只获取增量,即从备用数据库中新添加的“y”条记录并作为主数据库重新启动。

或者我必须始终进行整个基地备份?

postgresql replication failover postgresql-9.1

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

AWS PostgresSQL RDS 实例是否可以提供停用词文件?

我需要提供自定义的停用词列表。从字典手册部分来看,执行此操作的方法是将一个停用词文件放入$SHAREDIR/tsearch_data/.

使用AWS时可以这样做吗?如果不是,是否可以通过命令行提供停用词文件?

postgresql full-text-search amazon-rds

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

用于对联合所有结果集执行偏移/限制的算法

我有两个结果集:

rs1:

     id       name
   serial     text
________________
     1        Nick
....................
  1233112     Pete
Run Code Online (Sandbox Code Playgroud)

rs2:

     id       name
   serial     text
________________
  123121      Mike
....................
 221233112   Junior
Run Code Online (Sandbox Code Playgroud)

如果我们写一个查询:

SELECT *
FROM
(

    SELECT *
    FROM rs1

    UNION ALL

    SELECT *
    FROM rs2

) as rs
OFFSET 100000 LIMIT 10;
Run Code Online (Sandbox Code Playgroud)

查询结果是如何计算的?将使用什么算法?

我相信服务器执行惰性评估是指不加载整个联合,对其进行迭代,然后返回所需的结果。

如果您描述了其他 SQL 服务器中使用的算法作为补充,我将很高兴。

UPD:我对数据库内部结构很陌生,不知道是否可以向 sql-server 本身询问查询的执行计划。

这是一个查询计划:

"Limit  (cost=77.11..77.88 rows=10 width=522)"
"  ->  Append  (cost=0.00..140.18 rows=1818 width=522)"
"        ->  Seq Scan on tbl  (cost=0.00..70.09 rows=909 width=522)"
"        ->  Seq Scan on …
Run Code Online (Sandbox Code Playgroud)

postgresql execution-plan database-internals postgresql-9.4

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

使用 Postgresql 中的生产数据更新暂存数据

我在服务器上使用 PostgreSQL(版本 9.3),并且希望使用生产实例数据库中的数据更新暂存实例数据库中的数据。每个数据库都由不同的角色控制,我想在传输中保持它们的权限分开。

我尝试按照文档操作并使用单独的用户(有权访问相应的 PostgreSQL 角色)运行这些命令:

staging-user: pg_dump production_db > prod_db_file
production-user: psql --single-transaction staging_db < prod_db_file
Run Code Online (Sandbox Code Playgroud)

但我有几个错误:must be owner of extension plpgsqlsyntax error at or near。此外,我不确定这是否能达到我想要的效果。pg_dump 和 psql 命令有很多可选标志,我不知道应该使用哪些。(我已经尝试了多种标志组合,但到目前为止没有任何效果。)

注意:当我尝试上述命令时,我的临时数据库已经存在。

如何将生产数据移至暂存数据库?

postgresql psql postgresql-9.3 pg-dump

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