折腾了半天在网上搜索,关于prest的内容还是较少,最后还是决定查看源码。
根据https://postgres.rest/executing-sql-scripts/中的 执行sql脚本部分进行配置,其中
[queries] location = /path/to/queries/
部分在windows下需要改为 [queries] location = “./queries/”,引号内的文件夹地址根据自己实际地址修改。
SELECT * FROM table WHERE name = "{{.field1}}" OR name = "{{.field2}}";
这边需要注意,如果查询的where后面字段为 int类型,不需要“”,或者全部使用‘’。且最后的;是不需要的,因为在prest里面最终会拼出SELECT json_agg(s) FROM (select * from logs where id = '1')这样的sql语句进行执行,;会导致错误。
另外在windows下sql.go下ExecuteScriptQuery,中2个函数需要注意
config.PrestConf.Adapter.GetScript 这个函数中会调用queries.go文件中的 GetScript函数,其中调用了filepath.join函数,但其中join使用的是os.Separator在windows下 是“\\”
config.PrestConf.Adapter.ParseScript这个函数中则会调用queries.go文件中的ParseScript函数,其中调用了path.Split函数,但此函数中strings.LastIndex(path, "/") 使用的为“/” 会导致split不成功,后面出错,执行sql模板不成功。
根本原因为filepath中使用的os.Separator最终会指向GO/Root目录下src/os/path_unix.go 或src/os/path_windows.go,这2个文件中
os.Separator是有区别的。
刚开始研究prest,不知道对不对,欢迎大牛指证。