标签: postgresql-10

Postgres 10. 对其他用户隐藏用户/角色

我安装了 postgresql 10,我想对其他用户隐藏用户/角色的名称。我搜索了其他帖子,有人建议:

REVOKE SELECT ON pg_catalog.pg_authid FROM public;
REVOKE SELECT ON pg_catalog.pg_auth_members FROM public;
Run Code Online (Sandbox Code Playgroud)

完成所有这些操作后,user1 无法深入了解用户的信息,(Error retrieving roles from the database server. ERROR: permission denied for relation pg_auth_members)但仍可以将它们全部列出,如下图所示

邮局

当然 user1 不是超级用户。

我已经测试过这个没有效果:

REVOKE SELECT ON pg_catalog.pg_roles FROM user1;
REVOKE SELECT ON pg_catalog.pg_user FROM user1;
Run Code Online (Sandbox Code Playgroud)

对此也进行了测试,但没有效果:

REVOKE SELECT ON pg_catalog.pg_authid FROM user1;
REVOKE SELECT ON pg_catalog.pg_auth_members FROM user1;
Run Code Online (Sandbox Code Playgroud)

如果我启动下一个语句,用户将无法登录并且一切都已损坏:

REVOKE SELECT ON pg_catalog.pg_roles FROM public;
REVOKE SELECT ON pg_catalog.pg_user FROM public;
Run Code Online (Sandbox Code Playgroud)

有没有办法实现这一目标?对我来说向其他用户隐藏用户的名称非常重要。

背景:我正在创建一个黑客 ctf(捕获标志)虚拟机。这是挑战之一......重点是避免用户可以看到“正确的数据库用户名”进行连接。这是他/她必须在数据库中查找提示和其他加密内容的内容。

编辑:“悲伤”的解决方法是创建数百个虚拟用户以“尝试隐藏”真实用户......但它必须是一个优雅的解决方案。有什么帮助吗?

postgresql permissions role users postgresql-10

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

ORDER BY 子句会降低查询性能

语境:

PostgreSQL 10,users表有3667438条记录,users表有一个名为social的JSONB,我们通常使用对计算函数输出进行索引的策略,这样我们就可以将信息聚合到一个单独的索引中。的输出engagement(social)函数是双精度数字类型。

问题:

有问题的条款是 ORDER BY engagement(social) DESC NULLS LAST,还有一个 btree 索引idx_in_social_engagement with DESC NULLS LAST附加到这个数据。

快速查询:

EXPLAIN ANALYZE
SELECT  "users".* FROM "users"
WHERE (follower_count(social) < 500000)
AND (engagement(social) > 0.03)
AND (engagement(social) < 0.25)
AND (peemv(social) < 533)
ORDER BY "users"."created_at" ASC
LIMIT 12 OFFSET 0;

Limit  (cost=0.43..52.25 rows=12 width=1333) (actual time=0.113..1.625 
rows=12 loops=1)
   ->  Index Scan using created_at_idx on users  (cost=0.43..7027711.55 rows=1627352 width=1333) (actual time=0.112..1.623 rows=12 loops=1)
         Filter: ((follower_count(social) < 500000) AND …
Run Code Online (Sandbox Code Playgroud)

postgresql performance order-by postgresql-10 postgresql-performance

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

psql 给出无效的数据目录错误

我有安装了ubuntu 18.04 服务器的VM 。我已经从 repo安装了postgres 10

默认安装。我在 postgres.conf 中进行了一些与连接计数相关的更改,并在 pg_hba.conf 中进行了与连接安全相关的更改。

安装目录都是默认的,包括数据目录。

服务器正在运行。我能够创建数据库并从 java 客户端访问它。

但是当我从同一个 VM 启动 psql 时,它会引发以下错误。

Error: Invalid data directory
Run Code Online (Sandbox Code Playgroud)

只是没有任何参数的 psql 也会出现此错误。

人们在尝试更改数据目录时遇到了这个错误,这对我来说并非如此。数据目录是默认目录,它由 postgres 用户拥有。

ubuntu@ubuntu:~$ ls -l /var/lib/postgresql/10/
total 4
drwx------ 20 postgres postgres 4096 Jun 12 02:54 main
Run Code Online (Sandbox Code Playgroud)

知道可能是什么原因或我应该在哪里查找 psql 客户端的详细错误吗?

postgresql ubuntu postgresql-10

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

通过基于传入的数组进行过滤,允许来自 plpgsql 函数的动态结果集?

我想我已经避免了这里的 XY 问题,因为我正在为真正的潜在问题(以动态方式总结多个表)列出我的解决方案,而且我只询问我卡住的最后一个部分。因此,首先有一些背景知识。我提供了一个最小的示例数据集,以及用于以我描述的方式汇总数据的工作代码。


考虑如下设置:

create temp table tbl1 (id int primary key, category text, passing boolean);

insert into tbl1 values
(1, 'A', 't'),
(2, 'A', 't'),
(3, 'A', 't'),
(4, 'A', 'f'),
(5, 'B', 't'),
(6, 'B', 'f'),
(7, 'C', 't'),
(8, 'C', 't'),
(9, 'C', 'f'),
(10, 'C', 'f'),
(11, 'C', 'f'),
(12, 'C', 'f'),
(13, 'B', 't'),
(14, 'B', 'f'),
(15, 'B', 't'),
(16, 'B', 'f'),
(17, 'B', 't'),
(18, 'B', 'f'),
(19, 'B', 't'),
(20, …
Run Code Online (Sandbox Code Playgroud)

postgresql aggregate plpgsql array postgresql-10

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

如何获取有关 Postgres 10 中新标识列背后的序列的信息?(生成 { 始终 | 默认} 作为身份)

Postgres 10 带来了 SQL 标准GENERATED { ALWAYS | BY DEFAULT } AS IDENTITY特性的实现,松散地称为标识列。这个特性取代了 Postgres 自己的SERIAL伪类型,消除了它的问题/问题。有关更多信息,请参阅此处此处

GENERATED…优于的主要原因之一SERIAL是序列号生成器在后台透明处理。我们可以添加列、调整当前序列号和删除列,所有这些都无需明确引用序列。

CREATE TABLE tbl (
    col  BIGINT 
         GENERATED ALWAYS AS IDENTITY 
         PRIMARY KEY ,
    col2 text
) 
;
Run Code Online (Sandbox Code Playgroud)

和…

ALTER TABLE tbl
ALTER COLUMN col
RESTART WITH 1000
;
Run Code Online (Sandbox Code Playgroud)

和…

ALTER TABLE tbl
ALTER COLUMN col
DROP IDENTITY IF EXISTS
;
Run Code Online (Sandbox Code Playgroud)

或者…

ALTER TABLE tbl
ALTER COLUMN col
DROP COLUMN IF EXISTS …
Run Code Online (Sandbox Code Playgroud)

postgresql identity postgresql-10

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

使用 WHERE 子句更新数组的第 n 个元素

我在 PostgreSQL 10 数据库product中有一个jsonb名为“元数据”的列的表。这是我第一次使用文档和 Postgres。jsonb值看起来像这样:

{
  "name": "l33t 衬衫",
  “价格”:“1200”,
  "数量": "60",
  “选项” : 
    {
      “类型”:“收音机”,
      "title": "颜色",
      “选择”:[
        {“价值”:“红色”,“价格”:“-100”,“数量”:“30”},
        {“价值”:“蓝色”,“价格”:“+200”,“数量”:“10”},
        {“价值”:“绿色”,“价格”:“+300”,“数量”:“20”}
      ]
    }
}

两个问题:

1.如何选择“opts”数组中的特定元素?

select metadata->'options'->'opts'->(element here) from product
where  metadata->'options'->'opts' @> '[{"value" : "blue"}]'
Run Code Online (Sandbox Code Playgroud)

2 、当售出一件或多件时,如何更新“数量”(减去当前的“数量”)?

对指南/注释的进一步链接表示赞赏。

postgresql update json postgresql-10

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

“错误:时间戳超出范围”将存储为 bigint 的纪元转换为时间戳

ERROR: timestamp out of range: "1.52701e+15"当我尝试将存储为 bigint 的纪元转换为时间戳(值取自真实数据库表)时,我得到了:

select to_timestamp(1527012834506374);
ERROR:  timestamp out of range: "1.52701e+15"
Run Code Online (Sandbox Code Playgroud)

其他转换方法也不起作用:

select 1527012834506374::abstime::timestamp;
ERROR:  cannot cast type bigint to abstime

select 1527012834506374::integer::abstime::timestamp;
ERROR:  integer out of range
Run Code Online (Sandbox Code Playgroud)

这是一个有效的时代;https://www.epochconverter.com/告诉我 1527012834506374 相当于 2018-05-22 06:13:54.506 UTC

如何在 Postgres 中使用 SQL 进行转换?

postgresql timestamp type-conversion postgresql-10

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

在并行事务中使用相同的临时表名是否安全?

使用 postgreSQL 10 或 11,创建具有相同名称的临时表是否安全,每个表都携带不同的数据?我不打算在任何会话/连接/交易之间共享数据。名称本身并不重要,但我想避免为每个需要此类中间表的并发查询生成随机名称的麻烦。

临时表仅用于不同的SELECT查询。它将在每个带有该ON COMMIT DROP子句的事务结束时删除。

PostgreSQL文档说明:

当临时表存在时,具有相同名称的现有永久表对当前会话不可见,除非它们被模式限定名称引用。

我不清楚这是否也适用于临时表。

postgresql transaction temporary-tables postgresql-10 postgresql-11

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

删除表中的所有行后,如何将序列类型重置回 0?

我之前问过这个问题,有人在 db fiddle 上发布了一个非常有用的答案。这对我来说非常有效。但是,现在我想问一个新的(相关)问题:

假设我清除了表中的所有行(即在数据库小提琴示例中,通过执行“从 id > 0 的水果中删除”来删除苹果和橙色行)。如果我插入另一种水果(如西瓜),id 将从 4 开始,而不是 1。如何强制 id 类型重置回 0,以便下一次插入的 id=1 ?

postgresql postgresql-10

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

如何恢复大型 postgresql 数据库?

我正在努力将备份从本地 postgresql 恢复到 AWS 中托管的另一个 postgresql 数据库(rds-aurora postgresql,无服务器)。数据大小为170GB的压缩数据。

我之前想过使用 pg_restore 因为我可以传递该-j选项,但提取文件需要花费大量的时间和空间。

我的文件格式为= tar.gz (20200204_data_tar.gz)

我尝试使用管道提取并将其传递给 pg_restore 以节省时间,但出现以下错误。注意:备份是使用 pg_start_backup 生成的。

tar -xzOf 20200204_data_tar.gz | pg_restore
    --host=my-test.us-east-1.rds.amazonaws.com --port=5432 --username=postgresql--dbname=mytest -j 16 --password --verbose --exit-on-error --data-only 

pg_restore: [archiver] input file does not appear to be a valid archive
Run Code Online (Sandbox Code Playgroud)

本地版本 9.3.4 新集群版本使用 10.7

有人可以建议我如何恢复这个大型数据库吗?

postgresql postgresql-9.3 postgresql-10

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