Делает ли pg-promise DISCARD?

На основе этого ответа на вопрос относительно pg-promise, когда возвращается существующее соединение/сеанс по запросу A в пул и повторно используется совершенно другим запросом B. Будет ли pg-promise автоматически выполнять ОТКАЗАТЬ, чтобы Б не увидел ничего, оставленного А? Если нет, могу ли я выполнить его вручную с помощью pg-promise?

Спасибо.


person Jeb50    schedule 24.02.2021    source источник


Ответы (1)


Будет ли pg-promise автоматически выполнять DISCARD?

No.

Могу ли я выполнить его вручную с помощью pg-promise?

Да, но для отдельных запросов это не принесет вам пользы, потому что они сами управляют соединением, поэтому вы даже не будете знать, какой сеанс вы отбрасываете.

Я вижу, когда это может быть полезно только внутри методов task или tx, но там вы можете легко добавить свой собственный DISCARD запрос в конце, если это необходимо.

await db.task(async t => {

    // do your things here...

    // then run discard at the end, if needed:
    await t.none('DISCARD $1:value', ['PLANS']);
});
person vitaly-t    schedule 25.02.2021
comment
Я вижу, когда это может быть полезно только внутри задачи или методов tx, но там вы можете легко просто добавить свой собственный запрос DISCARD в конце. Не использовали pg-promise, не могли бы вы скинуть быстрый образец Node task? - person Jeb50; 25.02.2021
comment
@ Jeb50 Там ;) - person vitaly-t; 25.02.2021
comment
Если ожидается, что задача что-то вернет, скажем, select from myfunc(), то DISCARD должна продолжить return как: db.task(async t => { await t.none('DISCARD $1:value', ['TEMP']); return t.any('select * from myfunc()'); // return is needed. })... - person Jeb50; 25.02.2021
comment
@Jeb Все это согласуется с общим использованием обещаний (асинхронная парадигма). Что бы вы ни вернули из обратного вызова задачи, это то, с чем будет решена задача. - person vitaly-t; 25.02.2021