相关疑难解决方法(0)

如何使用Postgres中的CSV文件中的值更新选定的行?

我正在使用Postgres,并希望进行一个从CSV文件中获取的大更新查询,假设我得到了一张表(id, banana, apple).

我想运行一个更新香蕉而不是苹果的更新,每个新香蕉及其ID都将在CSV文件中.

我试着查看Postgres网站,但是这些例子正在扼杀我.

sql database csv postgresql file-io

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

合并具有多个参考的用户并计算他们的集体资产

有一组用户。一个人可以拥有多个用户,但ref1ref2可能相似,因此可以将用户链接在一起。ref1ref2不重叠,则 中ref1不存在 中的一个值ref2

一个用户可以拥有多种资产。我想“合并”具有一个或多个相似参考的用户,然后计算他们总共拥有多少资产。用户表中可能缺少条目,在这种情况下,我只想将所有者传播到 ref2 并设置 asset_count 和 asset_ids。

下面是一个示例架构来说明:

示例资产

SELECT * FROM assets;
Run Code Online (Sandbox Code Playgroud)
ID 姓名 所有者
1 #1 A
2 #2
3 #3 C
4 #4 A
5 #5 C
6 #6 d
7 #7 e
8 #8 d
9 #9 A
10 #10 A
11 #11 z

用户示例

SELECT * FROM users;
Run Code Online (Sandbox Code Playgroud)
ID 用户名 参考1 参考2
1 波波 A d
2 托托 e …

sql arrays postgresql graph-theory aggregate-functions

12
推荐指数
1
解决办法
440
查看次数

优化Postgres时间戳查询范围

我有以下表和索引定义:

CREATE TABLE ticket
(
  wid bigint NOT NULL DEFAULT nextval('tickets_id_seq'::regclass),
  eid bigint,
  created timestamp with time zone NOT NULL DEFAULT now(),
  status integer NOT NULL DEFAULT 0,
  argsxml text,
  moduleid character varying(255),
  source_id bigint,
  file_type_id bigint,
  file_name character varying(255),
  status_reason character varying(255),
  ...
)
Run Code Online (Sandbox Code Playgroud)

我在created时间戳上创建了一个索引,如下所示:

CREATE INDEX ticket_1_idx
  ON ticket
  USING btree
  (created );
Run Code Online (Sandbox Code Playgroud)

这是我的疑问

select * from ticket 
where created between '2012-12-19 00:00:00' and  '2012-12-20 00:00:00'
Run Code Online (Sandbox Code Playgroud)

这个工作正常,直到记录数量开始增长(约500万),现在它将永远回归.

解释分析揭示了这一点:

"Index Scan using ticket_1_idx on ticket  (cost=0.00..10202.64 rows=52543 …
Run Code Online (Sandbox Code Playgroud)

postgresql indexing query-optimization database-partitioning postgresql-performance

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

PostgreSQL删除除最旧记录以外的所有记录

我有一个具有多个条目的PostgreSQL数据库objectid,在多个devicenames,但有一个独特的timestamp每个条目。该表如下所示:

address | devicename | objectid      |  timestamp       
--------+------------+---------------+------------------------------
1.1.1.1 | device1    | vs_hub.ch1_25 | 2012-10-02 17:36:41.011629+00
1.1.1.2 | device2    | vs_hub.ch1_25 | 2012-10-02 17:48:01.755559+00
1.1.1.1 | device1    | vs_hub.ch1_25 | 2012-10-03 15:37:09.06065+00
1.1.1.2 | device2    | vs_hub.ch1_25 | 2012-10-03 15:48:33.93128+00
1.1.1.1 | device1    | vs_hub.ch1_25 | 2012-10-05 16:01:59.266779+00
1.1.1.2 | device2    | vs_hub.ch1_25 | 2012-10-05 16:13:46.843113+00
1.1.1.1 | device1    | vs_hub.ch1_25 | 2012-10-06 01:11:45.853361+00
1.1.1.2 | device2    | vs_hub.ch1_25 | 2012-10-06 01:23:21.204324+00
Run Code Online (Sandbox Code Playgroud)

我想删除每个 …

sql postgresql duplicate-removal

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

如何从频繁访问的表中删除许多行

我需要删除一个非常大的表(例如,5米行)的大多数(比方说,90%).该表的另外10%经常被读取,但不写入.

从" 按ID删除数百万行的最佳方式 ",我收集到我应该删除90%我删除的任何索引,以加快进程(除了我用来选择要删除的行的索引) .

从" PostgreSQL锁定模式 ",我看到这个操作将获取ROW EXCLUSIVE整个表的锁定.但是,因为我只是了另外的10%,这应该没有关系.

那么,在一个命令中删除所有内容是否安全(即DELETE FROM table WHERE delete_flag='t')?我担心如果删除一行失败,触发大量回滚,那么它将影响我从表中读取的能力.批量删除会更明智吗?

postgresql indexing locking transactions postgresql-performance

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

除了一行外,删除整个表

假设我有一个包含200k +行的表的数据库.
这个表有一个id为1800的固定元组.其余的元组序列从300k +开始.
我需要清理这个表,删除所有记录而不删除id为1800的一个寄存器.我想出了可能运行的3种类型的查询:

DELETE FROM table WHERE id > 1800
DELETE FROM table WHERE id <> 1800
DELETE FROM table WHERE id NOT IN (1800)
Run Code Online (Sandbox Code Playgroud)

我觉得第一个比其他人更快,但我不确定,因为所有其他数据的ID都大于1800.

哪一个更快,为什么?此外,如果有更快的方法删除不能删除的记录,请告诉我.

sql postgresql optimization sql-delete

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