AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / user-13023

davetapley's questions

Martin Hope
davetapley
Asked: 2017-07-29 10:58:26 +0800 CST

Postgres 建议“同时截断表......”

  • 16

运行时:

TRUNCATE TABLE YYYYY RESTART IDENTITY

我看到此错误消息:

ERROR:  cannot truncate a table referenced in a foreign key constraint
DETAIL:  Table "XXXXX" references "YYYYY".
HINT:  Truncate table "XXXXX" at the same time, or use TRUNCATE ... CASCADE.

在以下两个建议中HINT:

  1. 使用TRUNCATE ... CASCADE是有意义的,并且有效,但不太明确,因为必须检查YYYYY以查看级联的去向。这让我想尝试另一种选择:

  2. Truncate table "XXXXX" at the same time,但我的问题:

    截断表是什么意思at the same time?


我尝试添加 a TRUNCATE XXXXX...(并将它们都包装在BEGIN/中COMMIT),但这会产生相同的错误。

postgresql truncate
  • 2 个回答
  • 14528 Views
Martin Hope
davetapley
Asked: 2015-12-09 14:37:45 +0800 CST

通过批量迭代表来更新比在 PostgreSQL 中的整个表更快

  • 14

我有一张大约有一百万行的表。

它正在生产中使用,我运行了一个UPDATE覆盖约 95% 的行。

五个小时后,我取消了请求,因为它花了很长时间。


该表有一个自动递增的 ID 列,因此我尝试将WHERE查询条件扩展为包含id BETWEEN 1 AND 500.

此更新在大约两秒钟内完成。然后我手动迭代了id500 个批次,例如BETWEEN 500 AND 1000,然后BETWEEN 1000 AND 1500。

按照这个速度,将需要 2000 批 500 来更新整个表。

以 2 秒的速度更新 2000 个批次仅需要一个多小时。


我的问题是:

  1. 造成这种差异的原因是什么?
  2. 我不关心事务隔离,所以有没有一种方法可以模拟这种“批量更新”,而无需编写 2000 次更新的脚本以单独运行。
postgresql performance
  • 1 个回答
  • 14080 Views
Martin Hope
davetapley
Asked: 2014-05-01 22:09:13 +0800 CST

Postgresql中JSON数据中的主键

  • 6

我有一个表t,有一个名为 的列json,类型为JSON。在 JSON 中有一个自然键:

> SELECT json->'id' AS id FROM t LIMIT 1;
             id              
-----------------------------
 " 63631ff3809de7a17398602f"

我可以创建一个UNIQUE INDEXon id,因此:

> CREATE UNIQUE INDEX t_id ON t((json->>'id'));                                                                                                                       

CREATE INDEX

我想将其添加为table_constraint_using_index,但两者都失败PRIMARY KEY:

> ALTER TABLE t ADD CONSTRAINT t_pkey PRIMARY KEY USING INDEX t_id;                                                                                   
ERROR:  index "t_id" contains expressions
LINE 1: ALTER TABLE t ADD CONSTRAINT t_pkey
                                          ^
DETAIL:  Cannot create a primary key or unique constraint using such an index.

和UNIQUE:

> ALTER TABLE t ADD CONSTRAINT t_unique_id UNIQUE USING INDEX t_id;
ERROR:  index "t_id" contains expressions
LINE 1: ALTER TABLE t ADD CONSTRAINT t_unique_id...
                                          ^
DETAIL:  Cannot create a primary key or unique constraint using such an index.

我应该能够添加这样的约束吗?

postgresql-9.3 constraint
  • 2 个回答
  • 10150 Views
Martin Hope
davetapley
Asked: 2012-10-13 21:21:38 +0800 CST

更新部分索引的字段是在 Postgres 的索引中添加还是删除它

  • 3

我们可以为 Postgres 中的字段创建部分索引。

我正在考虑使用它来阻止archived位于以下索引中的行created_at field:

  1. 首先我们创建索引:

    test=# CREATE INDEX idx_my_table_created_at ON my_table(created_at) WHERE NOT(archived);
    
  2. 我们插入两行,一行进入,另一行idx_my_table_created_at不进入:

     id |         created_at         | archived
    ----+----------------------------+----------
      2 | 2012-10-12 17:39:17.28511  | t
      1 | 2012-10-12 17:38:55.531278 | f
    
  3. 现在我们UPDATE有一行目前在索引中,因此它不应该在索引中:

    test=# UPDATE my_table SET archived = true WHERE id = 1;
    


我的问题:id = 1还在idx_my_table_created_at吗?

这个问题是从我问过的一个问题的答案开始的,这个问题是关于如何处理一旦过时就不会被查询的行,因此archived。

postgresql performance
  • 1 个回答
  • 299 Views
Martin Hope
davetapley
Asked: 2012-10-06 10:29:23 +0800 CST

PostgreSQL 索引缓存

  • 19

我很难找到关于如何在 PostgreSQL 中缓存索引的“普通”解释,所以我想对任何或所有这些假设进行现实检查:

  1. PostgreSQL 索引,就像行一样,存在于磁盘上,但可能会被缓存。
  2. 索引可能完全在缓存中,也可能根本不在。
  3. 它是否被缓存取决于它的使用频率(由查询计划器定义)。
  4. 出于这个原因,大多数“明智的”索引将一直在缓存中。
  5. 索引与buffer cache行位于相同的缓存(?)中,因此索引使用的缓存空间对行不可用。


我理解这一点的动机来自另一个问题,我问过在哪里建议可以在大多数数据永远不会被访问的表上使用部分索引。

在进行此操作之前,我想明确一点,使用部分索引会产生两个优点:

  1. 我们减少了缓存中索引的大小,为缓存中的行本身释放了更多空间。
  2. 我们减小了 B-Tree 的大小,从而加快了查询响应。
postgresql performance
  • 2 个回答
  • 11658 Views
Martin Hope
davetapley
Asked: 2012-09-29 14:43:00 +0800 CST

我们应该如何处理在 PostgreSQL 中一旦过时就不会被查询的行?

  • 7

我们在 PostgreSQL 数据库中有一个表,该表每天以数百万行的数量级增长。

每行包括:

ID
Foreign user ID
Date and time
Other data

日期和时间与 并不严格单调ID,但它们很接近。

查询此表时,我们只对获取给定外国用户 ID 的行感兴趣,这些行的日期和时间在过去两周内。两周前的行将永远不会被查询,但是我们希望保留它们以供存档。

鉴于这个特殊用例:

  1. 我们应该在日期和时间列上建立索引吗?
  2. 是否有任何提示我们可以给出日期和时间(几乎)随 ID 单调增加的提示。
  3. 我们是否应该考虑尝试从表中删除超过两周的行,这可能会提高性能吗?
postgresql performance
  • 1 个回答
  • 505 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve