我创建了一个 postgres 用户 'tester' 并允许只读到数据库A。该用户对数据库B & C没有权限。
但是当我\l
列出数据库时。还列出了数据库B和C。如何只列出数据库A而隐藏其他数据库?
我在 pgadmin 中面临这个问题。我无法在 pgadmin 中进行编辑。我需要一种使用 postgres db 中的访问策略隐藏其他数据库的方法。
我创建了一个 postgres 用户 'tester' 并允许只读到数据库A。该用户对数据库B & C没有权限。
但是当我\l
列出数据库时。还列出了数据库B和C。如何只列出数据库A而隐藏其他数据库?
我在 pgadmin 中面临这个问题。我无法在 pgadmin 中进行编辑。我需要一种使用 postgres db 中的访问策略隐藏其他数据库的方法。
这是我的数据库的示例架构:
Priority | Productive | UnProductive | Neutral |
-------------------------------------------------
High | [1, 2] | [] | [4, 5] |
Medium | [3, 4] | [5, 7] | [2] |
Low | [1] | [2, 6] | [] |
注意:这些数字实际上是我数据库中的 UUID,在同一行中不会重复任何数字。
我想从 中取消嵌套类别productive
,unproductive
这样neutral
:
预期输出:
Productive: [1, 2, 3] # no 4 because it have been captured by neutral High priority
UnProductive: [7, 6] # no 5 and 2 because it have been captured before
Neutral: [4, 5] # no 2 because it is caputed before
UNION 过滤掉重复的条目,而 UNION ALL 保持重复。与这种情况类似,考虑这种反例,我想设置联合以仅检查单列重复性。
SELECT id, 1 AS category FROM users UNION SELECT id, 2 FROM users_2;
在这里,我想拒绝所有 UNION 条目id, 2
并仅基于id检查重复性。
结果:
id | category
------------------
100 | 1
101 | 1
... | ...
100 | 2 # Skip this as 100 is already present
201 | 2
....
预期的:
id | category
----------------
100 | 1
101 | 1
... | ...
201 | 2
当特定图书馆中没有书籍数据时,就会出现问题。考虑以下工作场景。
桌子library
--------------------------------
| id | name | owner |
--------------------------------
| 1 | ABC | A |
| 2 | DEF | D |
| 3 | GHI | G |
--------------------------------
桌子books
--------------------------------
| id | title | library |
--------------------------------
| a | xxx | 1 |
| b | yyy | 1 |
| c | zzz | 2 |
--------------------------------
现在,当我进行如下查询时:
SELECT library.name, array_agg(b.title) AS book_list FROM library,
(SELECT title FROM books WHERE books.library = :library_no) as b
WHERE library.id = :library_no GROUP BY library.id
该查询为库 1 和 2 生成输出,但不为库 3 生成输出。为什么以及如何解决此问题?(在没有图书馆书籍的情况下生成一个空列表)
所需输出:
----------------------
| name | book_list |
----------------------
| GHI | {} | # or {null}
-----------------------
我什至试过coalesce
如下:
SELECT library.name, coalesce(array_agg(b.title), ARRAY[]::VARCHAR[]) AS book_list FROM library,
(SELECT title FROM books WHERE books.library = :library_no) as b
WHERE library.id = :library_no GROUP BY library.id
Postgres 版本:12