【发布时间】:2018-05-22 11:18:12
【问题描述】:
我有以下文件queries.sql,其中包含许多查询,结构如下:
/* Query 1 */
SELECT cab_type_id,
Count(*)
FROM trips
GROUP BY 1;
/* Query 2 */
SELECT passenger_count,
Avg(total_amount)
FROM trips
GROUP BY 1;
/* Query 3 */
SELECT passenger_count,
Extract(year FROM pickup_datetime),
Count(*)
FROM trips
GROUP BY 1,
2;
然后我编写了一个正则表达式,可以在文件中找到所有这些查询:
/\*[^\*]*\*/[^;]*;
我想要实现的目标如下:
- 使用正则表达式选择所有查询。
- 为每个查询添加前缀
EXPLAIN ANALYZE - 执行每个查询并将结果输出到新文件。这意味着,查询 1 将创建一个带有相应输出的文件
q1.txt,查询 2 创建q2.txt等。
我的主要挑战之一(没有问题,对吗?;-))是我对我必须使用的 linux bash 相当不熟悉。
我尝试了cat queries.sql | grep '/\*[^\*]*\*/[^;]*;',但没有返回任何内容。
所以解决方案可能如下所示:
count = 0
for query in (cat queries.sql | grep 'somehow-here-comes-my-regex') do
count = $count+1
query = 'EXPLAIN ANALYZE '+query
psql -U postgres -h localhost -d nyc-taxi-data -c query > 'q'$count'.txt'
除了:那不起作用,我不知道如何使它起作用。
【问题讨论】:
-
只是提示:
grep 'somehow-here-comes-my-regex' queries.sql与cat queries.sql | grep 'somehow-here-comes-my-regex'做同样的事情 -
很高兴知道,谢谢!
-
@samwise,您当前的
psql命令不需要密码字符串吗? -
不,它是这样工作的。如果必须这样做,它只是在 docker 中作为基准。