标签: postgresql

我在转移一张非常大的桌子时被打断了。我怎样才能从它停止的地方拿起它?

我编写了一个 python 脚本来在不同数据库(从 SQL Server 到 Postgres)的表之间选择和插入行。该表有大约 2000000000 行,传输停止在它中间的某个地方。我尝试选择具有偏移量的行作为已传输的行数。但是 count(*) 占用了太多的服务器资源,当我尝试时服务器变得无响应。(内存使用量在很短的时间内从 100MB 上升到 ~8GB)

我想知道是否有办法从它停止的地方提取转移。转移我目前在 Postgres 中拥有的行数大约需要 3 天时间。

谢谢。


另外,我知道大概的行数。所以也许我可以做这样的事情:如果有大约 12392320 行,删除第 12390000 行之后的所有内容,然后从 12390001 开始。这样的事情可能吗?

postgresql sql-server count

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

获取包含每列最后一个非 NULL 值集的行

假设有一张表

version col_A   col_B   col_C
1       A1      B1     (null)
2       A2      B3     (null)
3       A3      B2     (null)
4       A5     (null)   C1
5       A1     (null)  (null)
Run Code Online (Sandbox Code Playgroud)

我需要的是获取 Postgres 中每列的最后一个非空值,即对于上表,我期望结果为(A1,B2,C1)。

这里的“last”是指当表按列版本排序时,每列中的最后一个非空值。

版本列始终仅包含非空值。

该表不会很大,因为只有几千行。所以,不太担心性能。

postgresql

6
推荐指数
3
解决办法
4676
查看次数

如何检查 int[] 数组是否包含小于 X 的值?

我们可以使用 来检查数组中是否包含特定值'X' = ANY(haystack)。但是,如何检查整数数组是否包含小于 X 的值?例如,我想查找至少有一个值小于 100 的所有数组。

postgresql

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

MS SQL Server 支持“功能索引”吗?

我在阅读 PostgreSQL 文档时刚刚遇到基于表达式的索引(又名“功能索引”)(我以前不知道此类索引)。

我只是想知道 Microsoft SQL Server 中是否有与此类似/等效的内容?我已阅读有关索引的 SQL Server 文档,但没有看到任何明显相似/等效的内容。

postgresql index sql-server functions

6
推荐指数
3
解决办法
2607
查看次数

如何通过子查询或连接来利用分区修剪?

我有一个分区表...

CREATE TABLE erco.rtprices
(
    scedtime timestamp with time zone NOT NULL,
    node_id integer NOT NULL,
    lmp numeric(12,6),
    CONSTRAINT rtprices_pkey PRIMARY KEY (scedtime, node_id)
) PARTITION BY LIST (node_id);
Run Code Online (Sandbox Code Playgroud)

每个都有node_id自己的分区。

如果我进行直接查询(第一个版本),例如:

explain select scedtime, lmp 
from erco.rtprices
where node_id = 11111
Run Code Online (Sandbox Code Playgroud)

然后该计划仅对rtprices_11111分区进行顺序扫描。 这就是我要的。

但是,如果我执行(第二个版本)查询,例如

explain select scedtime, lmp 
from erco.rtprices
inner join erco.nodes using (node_id)
where nodename = 'somename'
Run Code Online (Sandbox Code Playgroud)

那么该计划包括对每个分区进行顺序扫描,即使此查询与第一个查询一样有限制。

我尝试了上述查询的另一种形式(第三个版本)。

explain select scedtime, lmp 
from erco.rtprices
where node_id = (select node_id from erco.nodes where nodename='somename') …
Run Code Online (Sandbox Code Playgroud)

postgresql execution-plan partitioning postgresql-performance postgresql-13

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

错误 - 存储过程 PGSQL 中的“查询没有结果数据的目标”

我有以下存储过程:-

-- PROCEDURE: public.master_todo(text, text)

-- DROP PROCEDURE IF EXISTS public.master_todo(text, text);

CREATE OR REPLACE PROCEDURE public.master_todo(
    "actiontype" text,
    "actionvalue" text)
LANGUAGE 'plpgsql'
AS $BODY$
BEGIN
IF(actiontype = 'getAllTodo') THEN
  SELECT * FROM todo_list;
  
END IF;
END
$BODY$;

Run Code Online (Sandbox Code Playgroud)

我使用 PGAdmin 中的过程 -> 创建过程创建的。但是,在使用 EXEC 测试它时,出现错误:-

ERROR:  query has no destination for result data
HINT:  If you want to discard the results of a SELECT, use PERFORM instead.
CONTEXT:  PL/pgSQL function master_todo(text,text) line 4 at SQL statement
SQL state: 42601
Run Code Online (Sandbox Code Playgroud)

在阅读了有关此问题的其他一些答案后,我尝试了:- …

postgresql

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

当没有匹配记录时,为什么 SELECTing sum() 返回 null 而不是 0?

这只是无数让我一直感到沮丧的小细节之一,迫使我记住各种特殊代码,并导致我的查询变得比应有的更难看。

尝试以下查询来获取大小:

SELECT sum(amount) FROM table WHERE conditions;
Run Code Online (Sandbox Code Playgroud)

如果它找不到sum()该数量的记录,它将返回空/空/未定义而不是 0,导致我的应用程序中的输出意外为空,而不是零的“总和”。但是sum()意味着“总和”,那么为什么不直接返回 0呢?

我知道解决方案。你“简单地”做:

SELECT COALESCE(sum(amount), 0) FROM table WHERE conditions;
Run Code Online (Sandbox Code Playgroud)

现在即使没有记录也会返回0。但它很丑,而且用起来不再感觉“有趣”。并不是说数据库应该是一个“有趣的游戏”,但你知道我的意思:如果查询变得过于复杂/“丑陋”,那么使用它就不再令人满意,特别是如果你知道这必须是在各种地方重复出现,这不仅仅是一些晦涩难懂的、一次性的边缘案例。

让它表现成这样的背后的思考过程是什么?我还有许多与 相关的其他问题null,但对于这个问题,我将重点关注这一件事。

postgresql null database-design coalesce

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

验证 postgresql 配置文件的命令?

我通过ansible生成postgresql配置文件,并将它们放入/etc/postgresql/XX/main/conf.d/whatever.conf. 我不小心犯了一个语法错误并破坏了我的 postgresql,需要手动修复。

是否有任何 postgresql 命令来验证文件是否是有效的 postgresql.conf 文件?

sudoers文件可以通过 进行验证/usr/sbin/visudo -cf path/to/file。有没有postgresql的东西?

我目前正在运行 Ubuntu 18.04 和 20.04,以及 PostgreSQL 10、12 等(是的,有几个不同的版本)。

postgresql deployment configuration

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

PostgreSQL – 是否可以阻止或拒绝需要所有分区的查询?

我们计划在 RDS 上的 PostgreSQL 13.4 中使用列表/范围分区来对约 5 亿行的数据集进行分区。我们的读取访问模式应该只需要每个查询访问非常少量的分区。我们希望防止需要访问每个分区的读取查询,以便该策略可以随着数据量的增长而很好地发挥作用。是否可以在数据库层强制执行任何检查或防护,以拒绝/阻止/失败需要包含每个分区的查询计划的查询?

本质上,我希望这体现为确保子句中有足够的过滤,WHERE以便查询规划器知道它不需要路由到每个分区。我们可以检查来自业务逻辑的查询示例的查询计划,但如果能够自动执行它就更好了。理想情况下,如果开销不是太高,我们可以在生产中强制执行,但在较低的环境中执行此操作将是积极的一步。对于如何实现这一点,有什么选择或建议吗?提前谢谢了。

postgresql partitioning postgresql-13

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

从现有数据库自动生成后,如何调整 PgAdmin 的 ERD 工具中的表链接端点?

我可以移动线条本身,但无法移动端点,这会导致线条重叠。了解正在引用哪个关系的唯一方法是将鼠标悬停在连接上。复杂 ERD 的打印输出变得无法使用。

我可以移动表格和线条本身,但无法移动端点。

令人困惑的重叠

postgresql erd pgadmin

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