Это мой самый первый вопрос в StackOverflow, поэтому, если я делаю что-то не так, пожалуйста, будьте осторожны.
Я борюсь с выполнением SELECT pg_notify из скрипта Python. Кажется, это не работает вообще.
Мой сервер NodeJS прослушивает канал 'testnotify' с помощью pg-обещания. Я ставлю это только для полноты, потому что это работает.
db.connect({direct: true})
.then(sco => {
sco.client.on('notification', data => {
console.log('Received:', data);
});
return sco.none('LISTEN $1~', 'testnotify');
})
.catch(error => {
console.log('Error:', error);
});
Мой скрипт на Python должен выдавать уведомление после серии успешных операций с БД.
Я так делаю
conn = psycopg2.connect(conn_string)
cur = conn.cursor()
cur.execute("SELECT pg_notify('%s', '%s');" % ('testnotify', 'blabla'))
или тому подобное
query = "SELECT pg_notify('testnotify', 'blabla');"
print(query)
cur.execute(query)
Я пытался подобным образом с NOTIFY testnotify, 'blabla', и ничего не работает. Ничего не происходит на стороне NodeJS.
Но когда я копирую результат print (query) из консоли Python и выполняю его непосредственно из PostgreSQL, тогда он работает как чудо.
Я не понимаю, что не так с моим кодом.
Я использую psycopg2 2.7.5, PostgreSQL 10, Node 10 LTS, pg-обещание в Windows 10.
Примечание: это не проблема с Node, потому что он работает, когда pg_notify или notify вызываются с помощью триггера в исходной таблице в postgresql или при выполнении уведомления в виде обычного sql-запроса в db. Это не работает, только когда я пытаюсь поднять уведомление из скрипта Python.
После двух дней жонглирования этим я думаю, что это что-то очевидное и глупое, но я не вижу этого. А может быть, это просто невозможно ...
Пожалуйста, помогите.