小编Erw*_*ter的帖子

如何修复所有重复的键值违反唯一约束

我有一个用 Django 应用程序创建的 Postgres 数据库。当我转移它时,它从未重新索引任何内容,并且在尝试执行此操作时出现错误。似乎有很多表都有这个问题。有没有办法可以使用我在另一个问题中找到的这段代码并将其用于所有序列和表格?

SELECT setval('tablename_id_seq', (SELECT MAX(id) FROM tablename)+1)
Run Code Online (Sandbox Code Playgroud)

postgresql sequence identity django

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

PostgreSQL - 不同月份的最大总和与多年的关系

这个问题是关于MySQL 5.6这里的一个问题的PostgreSQL 版本。最初,这是两个 RDBMS 的一个问题,但有人建议我,鉴于两个系统的不同功能,我应该拆分问题 - 特别是我认为 CTE(WITH 子句)应该使查询更加优雅和可读!

假设我有一个肿瘤列表(这个数据是根据真实数据模拟的):

CREATE table illness (nature_of_illness VARCHAR(25), created_at DATETIME);

INSERT INTO illness VALUES ('Cervix', '2018-01-03 15:45:40');
INSERT INTO illness VALUES ('Cervix', '2018-01-03 15:45:40');
INSERT INTO illness VALUES ('Cervix', '2018-01-03 15:45:40');
INSERT INTO illness VALUES ('Cervix', '2018-01-03 15:45:40');
INSERT INTO illness VALUES ('Cervix', '2018-01-03 15:45:40');
INSERT INTO illness VALUES ('Lung',   '2018-01-03 17:50:32');
INSERT INTO illness VALUES ('Lung',   '2018-02-03 17:50:32');
INSERT INTO illness VALUES ('Lung',   '2018-02-03 17:50:32');
INSERT INTO illness VALUES ('Lung', …
Run Code Online (Sandbox Code Playgroud)

postgresql cte greatest-n-per-group

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

Postgres 中有没有更简洁的方法来提取字符串的一部分?

我正在使用 Postgres 9.5。我有一个表,其中有一列记录 URL。有时 URL 具有查询字符串,有时则没有。我想提取 URL,减去任何查询字符串,所以我想出了:

select substring(url, 0, case position('?' in url) when 0 then length(url)+1 else position('?' in url) end) 
from article;
Run Code Online (Sandbox Code Playgroud)

这看起来有点罗嗦,我想知道是否有更简洁的方法来做到这一点。我的表列是类型TEXT

postgresql select string substring

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

表中有一个列,但无法从这部分查询中引用它

我一直在学习Postgres(来自SQL Server),这个错误真的让我很困惑。

\n\n

这是带有一些示例数据的代码:

\n\n
create table T (\nID serial primary key,\nA varchar(1),\nB varchar(1),\nC varchar(1)\n)\n
Run Code Online (Sandbox Code Playgroud)\n\n

\xe2\x86\x91 测试表。

\n\n
insert into T (A, B, C)\nvalues('A', 'B', 'C'), ('A', 'B', 'C')\n
Run Code Online (Sandbox Code Playgroud)\n\n

\xe2\x86\x91 插入重复项

\n\n
delete from T\nwhere ID in (\n    select t.ID\n    from (  select ID, row_number() over (partition by A,B,C order by A,B,C) as rn\n            from T) as t\n    where t.rn < (select max(t.rn) from t)\n    )\n
Run Code Online (Sandbox Code Playgroud)\n\n

\xe2\x86\x91 删除重复项并保留最后一个条目。

\n\n

问题在于(select max(t.rn) from t)我假设这是一个菜鸟错误,与在引用带有别名的列时不知道 postgres 语法有关? …

postgresql duplication subquery

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

触发功能不存在,但我很确定它存在

我有一个程序:

create or replace procedure pro_update_last_read(in input_sensor_id integer, in read_time timestamp)
as
$$
begin
    update sensor
    set last_read = read_time
    where sensor_id = input_sensor_id;
end;
$$ language plpgsql;
Run Code Online (Sandbox Code Playgroud)

以及一个调用它的触发器:

create trigger tri_last_read
    after insert or update of report_time
    on report
execute procedure pro_update_last_read(sensor_id, report_time);
Run Code Online (Sandbox Code Playgroud)

但是,在创建触发器时,我收到错误消息:

 [42883] ERROR: function pro_update_last_read() does not exist
Run Code Online (Sandbox Code Playgroud)

为什么会发生这个错误?

postgresql trigger stored-procedures plpgsql functions

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

从“组合,任一内部连接”中获取结果

我有一种感觉,这肯定被问过多次,但我只是找不到解决方案,甚至可能因为难以解释而提出问题。

我们都知道内连接基本上给出了两个表的“交集”。因此多个内连接给出了所有表的交集。但是,我希望获得一个内部连接,该连接获得表 B 与 A表 C 与 A的交集。

对于获得所有组织的请求,我要么是主持人,要么是管理员。

SELECT *
FROM organization
INNER JOIN moderator_organization
  ON organization.id = moderator_organization.organization AND moderator_organization.user = 10
INNER JOIN admin_organization
  ON organization.id = admin_organization.organization AND admin_organization.user = 10
Run Code Online (Sandbox Code Playgroud)

然而,上面只会选择用户(ID 为 10)既是管理员又是组织者的组织,而不是其中任何一个都为真的组织。要在图表中可视化,我想:

在此处输入图片说明

红色区域是我想要请求的地方。

postgresql join database-design union

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

在 plpgsql 的存储过程中使用参数

我正在尝试返回重叠多边形的数量。问题是它抱怨我的“$1”标志:

Error is "SQL state: 42601", syntax error at "$1". 
Run Code Online (Sandbox Code Playgroud)

为什么是这样?我在这里完全是初学者,除了用符号引用参数之外,我无法在网上找到解决方案$

CREATE OR REPLACE FUNCTION any_overlap (x text) 
RETURNS integer AS $$
DECLARE amount INTEGER;
BEGIN
    SELECT COUNT(*) INTO amount FROM $1 a
    INNER JOIN $1 b ON 
    (a.polygon && b.polygon AND ST_Relate(a.polygon, b.polygon, '2********'))
    WHERE a.ctid != b.ctid;
    RETURN amount AS id;
END; $$ LANGUAGE plpgsql;
Run Code Online (Sandbox Code Playgroud)

postgresql syntax dynamic-sql plpgsql postgis

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

约束排除以获取最新的 N 行

我正在管理一个包含几百万条记录的表,这些记录被实时插入。我的应用程序的一部分需要显示最后插入的 N 行,所以一开始我只是查询:

select id, logdate, content from measurements order by logdate DESC limit 500;
Run Code Online (Sandbox Code Playgroud)

几天后,我发现设置id为(对于此示例)更快10000000000 - extract(epoch from logdate),并将其用作PRIMARY KEY,所以

select id, date, content from measurements limit 500;
Run Code Online (Sandbox Code Playgroud)

自然会按 排序id,因此会产生最新的记录。

随着表的增长,它变得难以管理,所以我求助于分区。我按照文档说的那样做了

CREATE TABLE measurement_y2007m11 (
CHECK ( logdate >= DATE '2007-11-01' AND logdate < DATE '2007-12-01' )
) INHERITS (measurement);

CREATE TABLE measurement_y2007m12 (
CHECK ( logdate >= DATE '2007-12-01' AND logdate < DATE '2008-01-01' )
) INHERITS (measurement); …
Run Code Online (Sandbox Code Playgroud)

postgresql index partitioning

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

为什么以非所有者身份登录时可以删除表?

我读到只有所有者可以删除表,其他用户不能这样做。

我用所有者创建了一个表,postgres然后将它作为另一个用户删除。我应该撤销哪些特权来禁止它?

用户在 db 属性中拥有默认授予的所有权限,但我没有看到任何“创建表”或“删除表”权限。

postgresql security permissions pgadmin drop-table

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

对特定配对的唯一约束

我试图找出一个特殊的UNIQUE约束:表中有很多列Users,但只有这两列与问题相关:

id bigint,
active boolean,
...
Run Code Online (Sandbox Code Playgroud)

我想允许多行具有相同的id-其中只有一行可能具有active = true.

例如,可以有很多行包含id = 1active = false,但只有一行可以包含id = 1active = true

postgresql database-design unique-constraint

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