小编brk*_*brk的帖子

使用ReaderT是MaybeT还是MaybeT Reader?

我想编写一个读取配置的haskell程序并执行某些操作。该配置是a Data.Map,并将注入到Reader中。而且当我们找不到配置项时,应该中断阅读。刚刚停止,不需要任何错误消息。所以我只想要一个Maybe monad(而不是任何一个monad)。

问题是,我应该怎么叠两个单子,ReaderT Maybe还是MaybeT Reader

haskell monad-transformers

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

以原子方式替换 PostgreSQL 表中所有内容的“正确”方法?

在我最近从事的项目中,许多(PostgreSQL)数据库表只是用作大查找数组。我们有几个后台工作服务,它们定期从服务器提取最新数据,然后用最新数据替换表的所有内容。替换必须是原子的,因为我们不希望查找器看到部分完成的表。

我认为最简单的替换方法是这样的:

BEGIN;
DELETE FROM some_table;
COPY some_table FROM 'source file';
COMMIT;
Run Code Online (Sandbox Code Playgroud)

但我发现很多生产代码都使用这种方法:

BEGIN;
CREATE TABLE some_table_tmp (LIKE some_table);
COPY some_table_tmp FROM 'source file';
DROP TABLE some_table;
ALTER TABLE some_table_tmp RENAME TO some_table;
COMMIT;
Run Code Online (Sandbox Code Playgroud)

(我省略了一些逻辑,例如更改序列的所有者等)

我只是看不出这种方法有什么优点。尤其是经过一些发现和实验之后。SQL 语句类似于ALTER TABLEDROP TABLE获取ACCESS EXCLUSIVE锁,它甚至会阻塞 SELECT。

谁能解释一下后一个 SQL 模式试图解决什么问题?或者它是错误的,我们应该避免使用它?

sql postgresql

5
推荐指数
0
解决办法
3824
查看次数

标签 统计

haskell ×1

monad-transformers ×1

postgresql ×1

sql ×1