小编Tho*_*rin的帖子

退出函数时删除临时表

我使用'on commit drop'选项在函数中使用临时表.我的问题是,在某些情况下,一个更全局的函数可以调用第一个两次,所以"创建临时表"在提交之前被调用两次 - 所以我有正常的错误"relation [my_temp_table]已经存在".

我使用函数末尾的临时表来返回"返回查询"中的行,所以在离开函数之前我无法手动删除表.

CREATE OR REPLACE FUNCTION my_function(_value text)
RETURNS setof my_table AS $$
DECLARE 
    resultCount integer := 0;
BEGIN

    create temp table my_temp_table on commit drop as
    select *
    from my_table 
    where value = _value ;

    select count(*) into resultCount from my_temp_table;
    if (resultCount = 0) then 
        raise exception 'value not found';
        end if;

    return query
    select * from my_temp_table;

END;$$ LANGUAGE plpgsql VOLATILE COST 100;
ALTER FUNCTION my_function(text) OWNER TO postgres
Run Code Online (Sandbox Code Playgroud)

如果你想知道为什么我直接使用临时表而不是my_table,那是因为我需要一个非常快的响应而且my_table非常大(几十万行)所以这样我只能请求一次而不是三次(搜索,计数和返回).

我找到了一个不使用临时表并创建类型的解决方法,但是my_table的结构会改变很多次,实际上我有几十个"我的表"和关注的"我的函数",所以这是一种不再写的方法每次我的表结构都会改变时,我的所有功能.

该函数必须返回与其请求的表相同的结构. …

database postgresql drop-table

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

使用 Overpass QL 获取行政边界

我尝试下载法国的州界(几十个州,不是大数据)。事实上,我寻找可以上传到我的 postgres 数据库中的边界来本地化 POI。OpenstreetMap 似乎是一个很好的数据源,所以我试图学习 Overpass QL,但它似乎比我想象的要难......在阅读了一些 wiki 之后,我来到了这个:

way["name:en"="France"];
way["type"="boundary"];
way["boundary"="administrative"];
way["admin_level"="4"];
Run Code Online (Sandbox Code Playgroud)

但是查询无休止地运行......我不确定我所做的查询,这是好的语法吗?谢谢

postgresql postgis openstreetmap overpass-api

2
推荐指数
1
解决办法
2902
查看次数

使用Cypress,如何获取非请求事件触发的api调用的响应体

我正在使用 cypress 测试我的登录页面。/api/auth/login当密码输入字段达到4个字符时,自动触发对我的api的调用。因此,在我的 cypress 规范文件中,该命令cy.get("password-input").type("1234")足以触发 api 调用。如何获取该 api 调用的响应正文?我想获取我的 api 发回的令牌。

在使用命令的经典 api 调用中,cy.request我可以轻松处理响应正文,但当 api 请求被另一个事件(如此处的事件)触发时,我找不到如何访问响应正文type

目前,我有一个解决方法,因为我的网站将 response.body.token 存储在 localStorage 中,因此我使用window以下命令访问令牌wait

赛普拉斯测试运行

it("should get token", () => {
  cy.visit("/login")
  cy.get("[data-cy="login-input"]).type("myLogin")
  cy.get("[data-cy="password-input"]).type("0001")
  cy.wait(5000)
  cy.window().then(window => {
    cy.log(window.localStorage.getItem("myToken"))
  })
})
Run Code Online (Sandbox Code Playgroud)

但这感觉很恶心...你能给我正确的方法来访问事件触发的 api 调用的响应正文吗type

cypress

2
推荐指数
1
解决办法
9776
查看次数

如何在Postgres中获得执行时间

我需要在plpgsql脚本中出于多种目的(计算,显示和存储)在变量中获取最后一个查询的执行时间,所以\timing我找不到psql 选项,因为我无法操纵结果时间。您是否知道是否有类似“ get diagnostics”命令的内容,但是要执行时间(或变通)?

get diagnostics my_var := EXECUTION_TIME;
Run Code Online (Sandbox Code Playgroud)

我找不到任何东西比其他row_countresult_oid...

postgresql plpgsql

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