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-33554

Paul Draper's questions

Martin Hope
Paul Draper
Asked: 2021-07-22 09:09:18 +0800 CST

据报道,“臃肿”的索引大小是个问题吗?

  • 2

我创建了一个包含 100 万条记录的表,然后删除了这些记录。(常见于某种处理列表。)

CREATE TABLE example (id int PRIMARY KEY);
INSERT INTO example SELECT generate_series(1, 1000 * 1000);
DELETE FROM example;
VACUUM example;

索引大小保持与删除前相同的大小。

SELECT pg_size_pretty(pg_relation_size(c.oid)) AS size
FROM pg_class c
WHERE oid = 'example_pkey'::regclass;
 size  
-------
 21 MB
(1 row)

同样,膨胀检测查询(例如ioguix/pgsql-bloat-estimation)将此索引识别为极度膨胀。

我不关心磁盘使用本身。指数的表现是否会因规模过大而受到影响?我应该跑步REINDEX吗?

postgresql performance
  • 1 个回答
  • 170 Views
Martin Hope
Paul Draper
Asked: 2021-02-24 10:10:20 +0800 CST

如何同时更新 PostgreSQL 中的唯一键?

  • 1
CREATE TABLE widget (
  id serial PRIMARY KEY,
  name text NOT NULL,
  ordinal int NOT NULL UNIQUE
);

我有数据

 id | name | ordinal 
----+------+---------
  1 | A    |       1
  2 | B    |       2
  3 | C    |       3

我想将其更新为

 id | name | ordinal 
----+------+---------
  1 | A    |       3
  2 | B    |       2
  3 | C    |       1

尽可能少地接触记录(即不要重写整个记录集,不要启动不必要的触发器),更新ordinal为目标值的普遍适用的方法是什么?

普通更新只会让我违反约束,即使它发生在单个语句中。

并且删除和重新创建唯一约束是昂贵的并且并发性差。

这似乎是一个足够普遍的问题,应该有一个很好的方法来做到这一点,我只是想不出。

postgresql update
  • 2 个回答
  • 459 Views
Martin Hope
Paul Draper
Asked: 2020-10-22 17:41:23 +0800 CST

PostgreSQL更新与删除+插入有什么“特别”

  • 12

我的理解是更新锁定一个元组,将其标记为已删除,然后添加一个新元组。

换句话说,更新 = 删除 + 插入。

至少我是这么相信的。但它似乎与 MVCC 中的 delete+insert 的更新有根本的不同。


设置:

CREATE TABLE example (a int PRIMARY KEY, b int);
INSERT INTO example VALUES (1, 1);

方法一:更新

-- session A                          session B
BEGIN;
UPDATE example SET b = 2 WHERE a = 1;
                                      DELETE FROM example WHERE a = 1;
COMMIT;
-- now there are 0 rows in table example (1 row was deleted by session B)

方法二:删除插入

-- session A                          session B
BEGIN;
DELETE FROM example WHERE a = 1;
INSERT INTO example VALUES (1, 2);
                                      DELETE FROM example WHERE a = 1;
COMMIT;
-- now there is 1 row in table example (0 rows deleted by session B)

因此

UPDATE example SET b = 2 WHERE a = 1;

不同于

DELETE FROM example WHERE a = 1;
INSERT INTO example VALUES (1, 2);

我如何理解更新的 MVCC 本质?元组是否具有在更新期间保留的某种 MVCC“身份”?它是什么?

postgresql concurrency
  • 1 个回答
  • 2958 Views
Martin Hope
Paul Draper
Asked: 2020-01-23 21:39:37 +0800 CST

什么是 `TABLE example` 语法?

  • 6

在 PostgreSQL 中,我一直在使用类似的语法

TABLE example1
UNION ALL
TABLE example2

我理解这相当于

SELECT * FROM example1
UNION ALL
SELECT * FROM example2

但是一位同事问我这个问题,我找不到任何关于这种语法的 PostgreSQL 文档。(“TABLE”不是一个有用的搜索短语。)我在哪里可以找到有关它的文档?

它是 ANSI SQL 标准吗?


编辑:它目前显然甚至混淆了 StackExchanges 的语法突出显示。

postgresql syntax
  • 2 个回答
  • 494 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