我有一个用 Django 应用程序创建的 Postgres 数据库。当我转移它时,它从未重新索引任何内容,并且在尝试执行此操作时出现错误。似乎有很多表都有这个问题。有没有办法可以使用我在另一个问题中找到的这段代码并将其用于所有序列和表格?
SELECT setval('tablename_id_seq', (SELECT MAX(id) FROM tablename)+1)
Run Code Online (Sandbox Code Playgroud) 这个问题是关于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) 我正在使用 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。
我一直在学习Postgres(来自SQL Server),这个错误真的让我很困惑。
\n\n这是带有一些示例数据的代码:
\n\ncreate table T (\nID serial primary key,\nA varchar(1),\nB varchar(1),\nC varchar(1)\n)\nRun Code Online (Sandbox Code Playgroud)\n\n\xe2\x86\x91 测试表。
\n\ninsert into T (A, B, C)\nvalues('A', 'B', 'C'), ('A', 'B', 'C')\nRun Code Online (Sandbox Code Playgroud)\n\n\xe2\x86\x91 插入重复项
\n\ndelete 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 )\nRun Code Online (Sandbox Code Playgroud)\n\n\xe2\x86\x91 删除重复项并保留最后一个条目。
\n\n问题在于(select max(t.rn) from t)我假设这是一个菜鸟错误,与在引用带有别名的列时不知道 postgres 语法有关? …
我有一个程序:
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)
但是,在创建触发器时,我收到错误消息:
Run Code Online (Sandbox Code Playgroud)[42883] ERROR: function pro_update_last_read() does not exist
为什么会发生这个错误?
我有一种感觉,这肯定被问过多次,但我只是找不到解决方案,甚至可能因为难以解释而提出问题。
我们都知道内连接基本上给出了两个表的“交集”。因此多个内连接给出了所有表的交集。但是,我希望获得一个内部连接,该连接获得表 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)既是管理员又是组织者的组织,而不是其中任何一个都为真的组织。要在图表中可视化,我想:
红色区域是我想要请求的地方。
我正在尝试返回重叠多边形的数量。问题是它抱怨我的“$1”标志:
Run Code Online (Sandbox Code Playgroud)Error is "SQL state: 42601", syntax error at "$1".
为什么是这样?我在这里完全是初学者,除了用符号引用参数之外,我无法在网上找到解决方案$。
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) 我正在管理一个包含几百万条记录的表,这些记录被实时插入。我的应用程序的一部分需要显示最后插入的 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) 我读到只有所有者可以删除表,其他用户不能这样做。
我用所有者创建了一个表,postgres然后将它作为另一个用户删除。我应该撤销哪些特权来禁止它?
用户在 db 属性中拥有默认授予的所有权限,但我没有看到任何“创建表”或“删除表”权限。
我试图找出一个特殊的UNIQUE约束:表中有很多列Users,但只有这两列与问题相关:
id bigint,
active boolean,
...
Run Code Online (Sandbox Code Playgroud)
我想允许多行具有相同的id-但其中只有一行可能具有active = true.
例如,可以有很多行包含id = 1和active = false,但只有一行可以包含id = 1和active = true。
postgresql ×10
plpgsql ×2
cte ×1
django ×1
drop-table ×1
duplication ×1
dynamic-sql ×1
functions ×1
identity ×1
index ×1
join ×1
partitioning ×1
permissions ×1
pgadmin ×1
postgis ×1
security ×1
select ×1
sequence ×1
string ×1
subquery ×1
substring ×1
syntax ×1
trigger ×1
union ×1