小编gue*_*tli的帖子

在 ascii 中表达基数的最常见方式

我知道有几个符号可以表达实体之间的基数。

但是在 ascii 中是否有一种实用的通用方法来表达基数?

示例:用户——组。一个用户可以有多个组,一个组可以有多个用户。

我看了这个页面:https : //en.wikipedia.org/wiki/Cardinality_(data_modeling)

例如:一对多的“订单” ?? “行项目”

以下是表示基数的一些图形方式:

https://en.wikipedia.org/wiki/Entity%E2%80%93relationship_model#Cardinalities

表示基数的最常见方式是什么?

这个有标准/rfc吗?

terminology

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

从 N:M 关系中获取给定组的成员

我有这种 N:M 关系:

CREATE TABLE auth_user (
    id integer NOT NULL PRIMARY KEY,
    username character varying(150) NOT NULL UNIQUE
);

CREATE TABLE auth_group (
    id integer NOT NULL PRIMARY KEY,
    name character varying(80) NOT NULL UNIQUE
);

CREATE TABLE auth_user_groups (
    id integer NOT NULL PRIMARY KEY,
    user_id integer REFERENCES auth_user(id) NOT NULL,
    group_id integer REFERENCES auth_group(id) NOT NULL,
    CONSTRAINT user_groups UNIQUE(user_id, group_id)
);

INSERT INTO auth_user VALUES (1, 'user1');
INSERT INTO auth_user VALUES (2, 'user2');
INSERT INTO auth_group VALUES …
Run Code Online (Sandbox Code Playgroud)

postgresql join many-to-many

4
推荐指数
2
解决办法
292
查看次数

列必须出现在 GROUP BY 子句中或用于聚合函数中

我有一个包含 col1、col2、col3 列的简单表格。都不可为空。

我想删除元组 (col1, col2) 有多个条目的所有行。背景:应添加 (col1, col2) 的唯一约束。

drop table mytable;

create table mytable (
    col1 integer not null,
    col2 integer not null,
    col3 integer not null);

-- rows to delete
insert into mytable values (1, 1, 1);
insert into mytable values (1, 1, 2);

-- rows to keep
insert into mytable values (2, 2, 1);
insert into mytable values (2, 3, 2);



delete from mytable where 
(col1, col2) in  (
    select col1, col2 from mytable  
    group by …
Run Code Online (Sandbox Code Playgroud)

postgresql postgresql-9.3 postgresql-10

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

选择孤立行(以通用方式)

我有一个表my_tables,它在几个表中被引用为外键。

我想选择my_table其他表中未引用的所有行。

AFAIK,应该可以以通用方式(带有一些内省魔法)来做到这一点。

postgresql foreign-key metadata postgresql-10

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

如何终止 PostgreSQL 用户的所有数据库使用

如何终止特定 PostgreSQL 用户的所有数据库活动?

我知道如何选择它们:SELECT * FROM pg_stat_activity WHERE usename='foo_user'

我在这里找到了这个:/sf/answers/2472371891/

我所做的是首先检查正在运行的进程

SELECT * FROM pg_stat_activity WHERE state = 'active';
Run Code Online (Sandbox Code Playgroud)

找到您要终止的进程,然后键入:

SELECT pg_cancel_backend(<pid of the process>)
Run Code Online (Sandbox Code Playgroud)

如果无法杀死进程,请尝试:

SELECT pg_terminate_backend(<pid of the process>)
Run Code Online (Sandbox Code Playgroud)

但如何将其应用于多个进程呢?

使用案例

有时 CI 中的测试花费太长时间,系统应该被破坏。

postgresql

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

查询需要数小时

到目前为止,我的 PostgreSQL 应用程序中的所有查询都很快。在过去的几天里,有时一个查询需要几个小时。索引是健康的,因为在 dump、restore、vacuum -z 之后,它仍然是一样的:查询需要几个小时。

EXPLAIN  VERBOSE SELECT DISTINCT "modwork_beleg"."direction" 
FROM "modwork_beleg" 
LEFT OUTER JOIN "modwork_isu_isu_pkunde" ON ("modwork_beleg"."id" = "modwork_isu_isu_pkunde"."beleg_id")
LEFT OUTER JOIN "modwork_isu_isu_vknr"   ON ("modwork_beleg"."id" = "modwork_isu_isu_vknr"."beleg_id")
LEFT OUTER JOIN "modwork_isu_isu_gpnr"   ON ("modwork_beleg"."id" = "modwork_isu_isu_gpnr"."beleg_id")
WHERE ("modwork_beleg"."state" IN (E'neu', E'inarbeit', E'wiedervorlage')
    AND (
      "modwork_isu_isu_pkunde"."pkunde" = 90237758
      OR
      "modwork_isu_isu_vknr"."vknr" = 254400297729
      OR
      "modwork_isu_isu_gpnr"."gpnr" = 1001030921
));
Run Code Online (Sandbox Code Playgroud)

查询计划:

 HashAggregate  (cost=36409.29..36409.30 rows=1 width=3)
   Output: modwork_beleg.direction
   ->  Merge Right Join  (cost=28836.70..36409.29 rows=1 width=3)
         Output: modwork_beleg.direction
         Merge Cond: (modwork_isu_isu_vknr.beleg_id = modwork_beleg.id)
         Filter: ((modwork_isu_isu_pkunde.pkunde …
Run Code Online (Sandbox Code Playgroud)

postgresql performance join

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

max(max(col1), max(col2), ...) 不起作用

我有一个包含三个整数列的表:

select max(col1), max(col2), max(col3) from mytable
Run Code Online (Sandbox Code Playgroud)

我想要三列的最大值。但这不起作用:

select max(max(col1), max(col2), max(col3)) from mytable
Run Code Online (Sandbox Code Playgroud)

如何完成这项工作?

我使用 PostgreSQL,但我希望这可以用标准 SQL 解决。

postgresql max

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

PostgreSQL 中的办公时间

如何在 PostgreSQL 行中存储办公时间,以便我可以计算办公时间。

例子:

  • 我们周一至周五的营业时间为 9:00 至 18:00。
  • 星期六我们的营业时间为 10:00 至 15:00
  • 从 12 月 24 日到 12 月 31 日我们的营业时间为 10:00 到 13:00(但周六和周日不营业)
  • 12 月 25/26 日等银行假期关闭。
  • 以上所有规则有效期至 2021 年 12 月 31 日。
  • 从 2022 年 1 月 1 日开始,我们的营业时间为周一至周五的 10:00 至 18:00。星期六和以前一样开放。

我想将这些数据按行存储,以便我们可以为其开发接口。

然后需要一种使用行/规则来计算具体开放时间的方法。

在这种情况下,不同的时区并不重要。

我使用 PostgreSQL 12.6 版。但如果需要,我可以升级到更新的版本。

postgresql datetime date-math

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

可以具有三种状态的列的数据类型:是、否、未知

我有一个应用程序,用户可以在其中做出决定:

  • 是的
  • 未知

我开始使用可以为空的布尔列。

但是事情变得相当复杂,因为我的框架 (django) 没有提供用于开箱即用的搜索表单编码的输入字段。

在搜索表单中,我需要四种状态:

  • 是的
  • 未知
  • 显示全部(在搜索中忽略此列)

相关问题:https : //stackoverflow.com/questions/38307866/search-form-for-nullbooleanfield

一个旧的经验法则再次出现在我的脑海中:

避免可为空的数据库列。

我想将数据类型从可为空的布尔字段更改为不同的类型。

可以具有三种状态的列的哪种数据类型:是、不是、未知?

我使用 Postgres 9,但 AFAIK 这对于这个问题应该无关紧要。

postgresql null datatypes

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

相同的查询,不同的结果(取决于用户的权限)

关于 SQL 的一般问题:

如果两个用户执行同一个sql语句,有没有可能user1和user2得到不同的结果?

想象一下 user1 比 user2 拥有更多的权限。

换句话说:user1 有可能收到 100 行,而 user2 只收到 80 行吗?

我的问题是关于 SQL 标准。

但是可以在评论中随意谈论特定数据库系统的实现。

permissions sql-standard

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

锁定:允许插入但不允许更新

我想锁定一个表:INSERT应该被允许,但UPDATE应该被禁用。

我正在使用当前的 PostgreSQL 版本。

我阅读了“建议锁”和“显式锁定”。也许我是盲人,但我找不到适合我的目标的解决方案。

以下是我的用例的详细信息:

有一个表,大致类似于日志记录:多个进程同时向表中添加新行。

脚本每小时处理一次添加的数据。

现在我想确定这个脚本有一个固定的工作集。不应修改脚本正在处理的行。但是,如果在脚本运行时添加新行也没关系。这些行在下一次调用脚本时获取进程。

postgresql locking

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