我将 9.4 postgresql 集群升级到 9.6。(通过 pg_upgrade,所以我的 db stats 没有移动到新集群)我有一个大表(大约 450M 记录)。这个表在我的代码中经常使用(很多选择和更少的 upserts)。当我启动我的 postgres 服务时,Postgres 会自动启动 autovacuum,它会锁定我的桌子。所以我不能做任何事情:既不截断表也不手动分析它。我试图在我的配置文件中设置 autovacuum=off,但它没有帮助(为什么?!我当然重新启动了服务器)
更新:我的目标是尽快开始使用该表。截断会有所帮助(因为表将是空的),分析应该会有所帮助(Postgres 将开始使用适当的索引)
什么是最快的方法:1)截断表或 2)分析表?任何帮助将非常感激。
更新: 这是查看锁的查询的输出:
SELECT psa.pid,granted,query FROM pg_locks pl LEFT JOIN pg_stat_activity psa ON pl.pid = psa.pid where locktype='relation';
pid | granted | query
-------+---------+---------------------------
11831 | t | autovacuum: VACUUM ANALYZE public.ig_tasks_users (to prevent wraparound)
11831 | t | autovacuum: VACUUM ANALYZE public.ig_tasks_users (to prevent wraparound)
11831 | t | autovacuum: VACUUM ANALYZE public.ig_tasks_users (to prevent wraparound)
11831 | …Run Code Online (Sandbox Code Playgroud) 我需要使用Ecto进行此SQL查询:
SELECT users.*, (select count(0) from money_transactions where from_id = users.id AND created_at > '2016-1-25 0:00:00.000000') as money_transactions_today_db FROM "users" WHERE "users"."client_token" = '123'
Run Code Online (Sandbox Code Playgroud)
我尝试做这样的事情,但它不起作用:
query = from users in Like4uElixir.User,
where: users.client_token in ^tokens,
select: {users, (from money_transactions in Like4uElixir.MoneyTransaction,
where: money_transactions.from_id == users.id,
select: count(0))}
Run Code Online (Sandbox Code Playgroud)
Ecto是否支持子查询?如果没有,我该如何执行查询?
我是Elixir的新手.我使用redix库与Redis一起工作.我无法正确执行MGET命令.此代码有效:
Like4uElixir.RedixPool.command(["MGET", "a", "b", "c"])
Run Code Online (Sandbox Code Playgroud)
- 它从Redis返回3个值.但是这段代码不起作用:
keys = ["a", "b", "c"]
Like4uElixir.RedixPool.command(["MGET", keys])
Run Code Online (Sandbox Code Playgroud)
但我拥有数组中的所有键.如何将我的数组转换为许多函数参数?