相关疑难解决方法(0)

如何在PostgreSQL中通过排序删除固定数量的行?

我正在尝试将一些旧的MySQL查询移植到PostgreSQL,但我遇到了这个问题:

DELETE FROM logtable ORDER BY timestamp LIMIT 10;
Run Code Online (Sandbox Code Playgroud)

PostgreSQL不允许对其删除语法进行排序或限制,并且该表没有主键,因此我无法使用子查询.此外,我想保留在查询删除的行为究竟该规定数量的记录-例如,如果表中包含30行,但它们都具有相同的时间戳,我还是想删除10,虽然它并不重要哪10.

所以; 如何在PostgreSQL中通过排序删除固定数量的行?

编辑:没有主键意味着没有log_id列或类似.啊,遗留系统的乐趣!

sql postgresql

94
推荐指数
4
解决办法
7万
查看次数

删除PostgreSQL中的重复记录

我在PostgreSQL 8.3.8数据库中有一个表,它没有键/约束,并且有多行具有完全相同的值.

我想删除所有重复项,每行只保留1份.

特别是有一列(称为"密钥")可用于识别重复(即每个不同的"密钥"应该只存在一个条目).

我怎样才能做到这一点?(理想情况下使用单个SQL命令)在这种情况下,速度不是问题(只有几行).

sql postgresql duplicates

94
推荐指数
8
解决办法
6万
查看次数

使用PostgreSQL查找重复的行

我们有一张包含以下列的照片表:

id, merchant_id, url 
Run Code Online (Sandbox Code Playgroud)

此表包含组合的重复值merchant_id, url.所以有一行可能会出现多次.

234 some_merchant  http://www.some-image-url.com/abscde1213
235 some_merchant  http://www.some-image-url.com/abscde1213
236 some_merchant  http://www.some-image-url.com/abscde1213
Run Code Online (Sandbox Code Playgroud)

删除这些重复的最佳方法是什么?(我使用PostgreSQL 9.2和Rails 3.)

sql database duplicates ruby-on-rails-3 postgresql-9.2

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

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

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

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

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

sql database csv postgresql file-io

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

SQL:如何合并不区分大小写的重复项

在将记录合并为一个时,删除重复项的最佳方法是什么?

我有一种情况,表跟踪播放器名称和他们的记录,如下所示:

stats
-------------------------------
nick     totalgames     wins   ...
John     100            40
john     200            97
Whistle  50             47
wHiStLe  75             72
...
Run Code Online (Sandbox Code Playgroud)

我需要合并缺口重复的行(当忽略大小写时)并将记录合并为一个,如下所示:

    stats
    -------------------------------
    nick     totalgames     wins   ...
    john     300            137
    whistle  125            119
    ...
Run Code Online (Sandbox Code Playgroud)

我在Postgres做这个.最好的方法是什么?

我知道通过这样做,我可以获得存在重复项的名称:

select lower(nick) as nick, totalgames, count(*) 
from stats 
group by lower(nick), totalgames
having count(*) > 1;
Run Code Online (Sandbox Code Playgroud)

我想到了这样的事情:

update stats
set totalgames = totalgames + s.totalgames
from (that query up there) s
where lower(nick) = s.nick
Run Code Online (Sandbox Code Playgroud)

除此之外不能正常工作.我似乎仍然无法删除包含重复名称的其他重复行.我能做什么?有什么建议?

sql postgresql duplicates

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

从表中删除没有唯一键的重复行

如何在Postgres 9表中删除重复行,每个字段上的行完全重复,并且没有单独的字段可以用作唯一键,所以我不能只GROUP BY使用列并使用NOT IN语句.

我正在寻找一个单独的SQL语句,而不是一个需要我创建临时表并将记录插入其中的解决方案.我知道如何做到这一点,但需要更多的工作来适应我的自动化过程.

表定义:

jthinksearch=> \d releases_labels;
Unlogged table "discogs.releases_labels"
   Column   |  Type   | Modifiers
------------+---------+-----------
 label      | text    |
 release_id | integer |
 catno      | text    |
Indexes:
    "releases_labels_catno_idx" btree (catno)
    "releases_labels_name_idx" btree (label)
Foreign-key constraints:
    "foreign_did" FOREIGN KEY (release_id) REFERENCES release(id)
Run Code Online (Sandbox Code Playgroud)

样本数据:

jthinksearch=> select * from releases_labels  where release_id=6155;
    label     | release_id |   catno
--------------+------------+------------
 Warp Records |       6155 | WAP 39 CDR
 Warp Records |       6155 | WAP 39 CDR
Run Code Online (Sandbox Code Playgroud)

sql postgresql duplicates duplicate-removal

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

PostgreSQL - 行中的大文本 - 更新或插入和删除 - 最好恢复空间/提高性能

我有一个postgres数据库作为应用程序的一部分,当前文本字段填充了大约300K的文本.

表中大约有3列可以常规填充这些信息.这导致表格超过一个大约100行的演出.我想删除那些列中的数据而不删除行中的其他信息 - 我的问题是,如果我做更新集columns =''比插入select更好,我只是选择了我需要的行,然后删除现有的行.它是第三方应用程序,因此此时无法重写它们存储数据的方式.

sql postgresql performance

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

从大型(> 100 MIo)postgresql 表中删除重复行(根据条件截断?)

这里一样,我有一个大表,用于存储我们系统中的所有事件,对于一种事件类型,我有重复的行(多次错误地从另一个系统导出)。我需要删除它们以清除统计数据。上面提出的解决方案是

  • 将记录(不重复)插入到临时表中,
  • 截断原始表并将它们重新插入。

但在我的情况下,我只需要删除一类事件,而不是所有行,这对于truncate. 我想知道我是否可以从 postgres USING 语法中受益,就像这个SO 答案一样,它提供了以下解决方案 -

DELETE FROM user_accounts 
USING user_accounts ua2   
WHERE user_accounts.email = ua2.email AND user_account.id < ua2.id;
Run Code Online (Sandbox Code Playgroud)

问题是我在这个大表中没有 id 字段。那么在这种情况下最快的决定是什么?从临时表中删除+插入是唯一的选择吗?

postgresql sql-delete

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

删除 Postgresql 中连续的重复行

我有一个包含 3 列(id、金额、时间)的表。该表根据id升序排列。我想删除除第一个之外在金额列中具有相同值的所有连续行。

例如:

id: 12,15,16,17,19,22
amount: 555,546,546,53,53,500
time:
Run Code Online (Sandbox Code Playgroud)

回答:

id:12,15,17,22    amount: 555,546,53,500    time:
Run Code Online (Sandbox Code Playgroud)

只要连续行在金额列中具有相同的值,连续行的时间列就相同。我在 SO 上搜索但找不到类似的问题

sql postgresql

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