如果qpad已关闭但端口已打开,能否恢复qpad查询?

时间:2019-02-26 06:42:46

标签: console kdb qsqlquery

我运行了多个查询,但是在保存它们之前,qpad崩溃了。但是,运行这些查询的q-port(在Windows计算机上)仍处于打开状态。我可以分别通过\v\f恢复变量和函数。

是否有办法恢复我使用q statements运行的所有qpad?我忘记维护日志文件,因此我试图找到一种使用q-port恢复查询的方法。

谢谢

4 个答案:

答案 0 :(得分:5)

很遗憾,由于Davis.Leong的原因,无法检索您的旧查询。但是,如果您不能/不想在服务器上创建表来保存它们,则还可以在QPad设置中选中日志查询框:

Q>设置>编辑器>将查询记录到“ queries_date.log”

现在,当您运行查询时,会将它们与服务器和时间戳一起写入QPad.exe所在目录的该日志文件中,如下所示:

/ 02/26/19 09:54:52 on `:localhost:1234:: from QPad1*
  show `logthis
/ 02/26/19 10:03:03 on `:localhost:1234:: from QPad1*
  a:10

答案 1 :(得分:2)

不幸的是,我认为没有一种方法可以检索您的命令历史记录。其他人已经提到了为什么,所以我不再赘述。不过,您以后可以轻松维护日志文件:

启动服务器时,添加-l标志将使您可以定义日志文件的路径。现在将从客户端发送到服务器的所有命令记录下来。例如

q ../log/logtest -l -p 5555
t:([]date:`date$();sym:`sym$();price:`float$())

将启动侦听5555的q进程,记录导致服务器更新的所有消息。因此,如果我在另一个q会话h:hopen `::5555中打开5555的句柄 和 更新表t

q)h"insert[`t](2000.01.01;`appl;102.3)"
,0

服务器将像这样更新t

q)t
date       sym  price
---------------------
2000.01.01 appl 102.3

将创建一个日志文件,其中将显示发送到服务器的所有命令。注意,但是它只会记录那些更改服务器数据状态的命令。

在服务器崩溃的情况下,可以使用与以前相同的命令重新加载此日志文件。

答案 2 :(得分:1)

答案是否定的。 qpad是与q进程交互的GUI。之所以可以检索变量和函数,是因为该过程并未终止。对于查询,默认情况下,q不会保存该查询,除非您自定义.z.pg以在queryHistory表中插入一条记录。

例如

q).z.pg:{[x]`queryHistory insert ([]queryTime:.z.P;query:enlist x)}
q)queryHistory:([]queryTime:`timestamp$();query:())
q)10+10
20
q)testTab:([]sym:10?`1;val:10?100)
q)queryHistory
queryTime query
---------------

queryHistory不会附加记录,因为这是在q进程本身中完成的,如果您在qpad中这样做:

10+10
testTab:([]sym:10?`1;val:10?100)

您会看到会有记录追加,因此即使您的GUI崩溃了,您也可以跟踪查询

q)queryHistory
queryTime                     query
-------------------------------------
2019.02.26D17:32:38.471063000 "10+10"
q)queryHistory
queryTime                     query
----------------------------------------------------------------
2019.02.26D17:32:38.471063000 "10+10"
2019.02.26D17:32:52.790863000 "testTab:([]sym:10?`1;val:10?100)"

答案 3 :(得分:0)

最近要了解的是,q脚本的备份位于“ c / users // Appdata / local”,每5-6分钟自动保存一次。这些是临时文件,在保存脚本时会被删除。但是,如果您的qPad崩溃了,您可以在这里找到文件:)