{"id":394959,"date":"2024-06-29T11:55:43","date_gmt":"2024-06-29T11:55:43","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=394959"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=394959","title":{"rendered":"<span>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0431\u043e\u0442\u043e\u0432 \u0434\u043b\u044f \u0442\u043e\u0440\u0433\u043e\u0432\u043b\u0438 \u043a\u0440\u0438\u043f\u0442\u043e\u0432\u0430\u043b\u044e\u0442\u0430\u043c\u0438 \u0438 \u0430\u043a\u0446\u0438\u044f\u043c\u0438 \u043d\u0430 Postgres<\/span>"},"content":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u0421\u0440\u0430\u0437\u0443 \u0441\u043a\u0430\u0436\u0443, \u0432 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043d\u0435 \u0431\u0443\u0434\u0443\u0442 \u043e\u043f\u0438\u0441\u0430\u043d\u044b \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b \u0442\u043e\u0440\u0433\u043e\u0432\u043b\u0438, \u0445\u043e\u0442\u044f \u043e\u043d\u0438 \u0435\u0441\u0442\u044c \u0438 \u043f\u0440\u0438\u043d\u043e\u0441\u044f\u0442 \u043f\u0440\u0438\u0431\u044b\u043b\u044c. \u041c\u043e\u044f \u0446\u0435\u043b\u044c \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0432\u0430\u043c \u0443\u0434\u043e\u0431\u043d\u044b\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0431\u043e\u0442\u043e\u0432 \u0438 \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u0441\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c \u043f\u044f\u0442\u0438\u043b\u0435\u0442\u043d\u0435\u0439 \u0440\u0430\u0431\u043e\u0442\u044b. \u0415\u0441\u043b\u0438 \u043a\u043e\u043c\u0443-\u0442\u043e \u043d\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b \u0431\u043e\u0442\u044b, \u0442\u043e \u0437\u0434\u0435\u0441\u044c \u0435\u0441\u0442\u044c \u043e\u0434\u043d\u043e \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043a\u0430\u043a \u0432\u0438\u0448\u0435\u043d\u043a\u0430 \u043d\u0430 \u0442\u043e\u0440\u0442\u0435 \u043c\u043e\u0436\u0435\u0442 \u043c\u043d\u043e\u0433\u0438\u0445 \u0437\u0430\u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043e\u0432\u0430\u0442\u044c, \u0430\u043d\u0430\u043b\u043e\u0433 dbms_pipe \u0432 ORACLE, \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043d\u0430 \u0447\u0438\u0441\u0442\u043e\u043c pgsql, \u043d\u0443 \u0430 \u0442\u0430\u043a\u0436\u0435 \u043c\u043d\u043e\u0433\u043e \u0434\u0440\u0443\u0433\u0438\u0445 \u043c\u043e\u0438\u0445 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0440\u0435\u0448\u0435\u043d\u0438\u0439. \u00a0\u042d\u0442\u043e \u043d\u0435 \u043e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u043c\u043e\u044f \u0440\u0430\u0431\u043e\u0442\u0430, \u0441\u043a\u043e\u0440\u0435\u0435 \u0445\u043e\u0431\u0431\u0438. \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u0431\u044b\u043b \u043f\u0440\u043e\u0441\u0442\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043b \u0435\u0441\u043b\u0438 \u043d\u0435 \u043f\u043b\u044e\u0441, \u0442\u043e \u0445\u043e\u0442\u044f \u0431\u044b \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0441\u0440\u0435\u0434\u0441\u0442\u0432 \u043d\u0430 \u043f\u0430\u0434\u0430\u044e\u0449\u0435\u043c \u0440\u044b\u043d\u043a\u0435, \u043f\u0440\u043e \u0440\u0430\u0441\u0442\u0443\u0449\u0438\u0439 \u0440\u044b\u043d\u043e\u043a \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c \u043d\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u0442\u0430\u043c \u0438 \u0442\u0430\u043a \u0432\u0441\u0435 \u0445\u043e\u0440\u043e\u0448\u043e. \u041f\u043e \u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044e \u044f \u043d\u0435 \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0441\u0442, \u00a0\u0430 \u0441\u043e\u0432\u0435\u0442\u0441\u043a\u0438\u0439 \u0430\u0439\u0442\u0438\u0448\u043d\u0438\u043a, \u0438 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0441\u0432\u043e\u0438\u0445 \u043d\u0435\u0432\u0438\u0434\u0438\u043c\u044b\u0445 \u0441\u043e\u043f\u0435\u0440\u043d\u0438\u043a\u043e\u0432 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u043b \u0432\u043e\u043b\u043a\u043e\u0432 \u0441 \u0423\u043e\u043b\u0442 \u0441\u0442\u0440\u0438\u0442. \u0414\u043b\u044f \u043c\u0435\u043d\u044f \u044d\u0442\u043e \u0431\u044b\u043b \u0432\u044b\u0437\u043e\u0432 \u0441\u0440\u043e\u0434\u043d\u0438 \u0438\u0437\u043e\u0431\u0440\u0435\u0442\u0435\u043d\u0438\u044e \u0432\u0435\u0447\u043d\u043e\u0433\u043e \u0434\u0432\u0438\u0433\u0430\u0442\u0435\u043b\u044f, \u043d\u043e \u0441 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c\u044e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438. \u0412 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u0442\u043e\u0440\u0433\u043e\u0432\u043b\u0438 \u043c\u043d\u0435 \u0441\u0438\u043b\u044c\u043d\u043e \u043f\u043e\u043c\u043e\u0433\u043b\u0430 \u043a\u043d\u0438\u0433\u0430 \u042d\u0434\u0432\u0438\u043d\u0430 \u041b\u0435\u0444\u0435\u0432\u0440\u0430 &#171;\u0412\u043e\u0441\u043f\u043e\u043c\u0438\u043d\u0430\u043d\u0438\u044f \u0431\u0438\u0440\u0436\u0435\u0432\u043e\u0433\u043e \u0441\u043f\u0435\u043a\u0443\u043b\u044f\u043d\u0442\u0430&#187;. \u0418\u0442\u0430\u043a, \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0438\u043c.<\/p>\n<h3>\u0422\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0435 \u043a \u0431\u043e\u0442\u0443<\/h3>\n<ol>\n<li>\n<p>\u0411\u043e\u0442 \u0434\u043e\u043b\u0436\u0435\u043d \u0437\u0430\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0434\u0435\u043d\u0435\u0433 \u0431\u043e\u043b\u044c\u0448\u0435 \u0447\u0435\u043c \u0431\u0430\u043d\u043a\u043e\u0432\u0441\u043a\u0438\u0435 \u0432\u043a\u043b\u0430\u0434\u044b, \u0442\u043e \u0435\u0441\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435 \u0447\u0435\u043c 5% \u0432 \u0432\u0430\u043b\u044e\u0442\u0435. \u0421\u0440\u0430\u0437\u0443 \u0441\u043a\u0430\u0436\u0443 \u044d\u0442\u043e \u0434\u043e\u0441\u0442\u0438\u0433\u043d\u0443\u0442\u043e, \u0431\u043e\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0443\u0436\u0435 3 \u0433\u043e\u0434\u0430 \u0438 \u0434\u043e\u0445\u043e\u0434 \u0434\u0430\u0436\u0435 \u043d\u0430 \u043f\u0430\u0434\u0430\u044e\u0449\u0435\u043c \u0440\u044b\u043d\u043a\u0435 \u043d\u0435 \u043e\u043f\u0443\u0441\u043a\u0430\u043b\u0441\u044f \u043d\u0438\u0436\u0435 35%. \u0412 \u0445\u043e\u0440\u043e\u0448\u0438\u0439 \u0433\u043e\u0434 \u0434\u043e\u0441\u0442\u0438\u0433\u0430\u043b 100%. \u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b \u0437\u0434\u0435\u0441\u044c \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c \u043d\u0435 \u0431\u0443\u0434\u0443. \u0422\u0430\u043a \u0436\u0435 \u043f\u043e\u043d\u0438\u043c\u0430\u044e, \u0447\u0442\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b \u0438 \u0443\u0431\u044b\u0442\u043a\u0438 \u0438 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0434\u043e\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e \u0432\u0441\u0435\u0433\u0434\u0430 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438\u0431\u044b\u043b\u044c \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0438 \u044f \u0432\u0441\u0435\u0433\u0434\u0430 \u0433\u043e\u0442\u043e\u0432 \u0447\u0442\u043e \u0431\u0443\u0434\u0443\u0442 \u0443\u0431\u044b\u0442\u043a\u0438.   <\/p>\n<\/li>\n<li>\n<p>. \u041b\u0435\u0433\u043a\u043e\u0441\u0442\u044c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432 \u0438 \u043f\u0440\u043e\u0433\u043e\u043d \u044d\u0442\u0438\u0445 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432 \u043d\u0430 \u0438\u0441\u0442\u043e\u0440\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445. \u042f \u043f\u043e\u0441\u0442\u0430\u0440\u0430\u044e\u0441\u044c \u0432\u0430\u0441 \u0443\u0431\u0435\u0434\u0438\u0442\u044c \u0432 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435, \u0447\u0442\u043e \u043b\u0443\u0447\u0448\u0435 pgsql \u0432\u044b \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u0442\u0435. \u0413\u043b\u0430\u0432\u043d\u043e\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0442\u044c \u0432\u0430\u043c \u0441\u043e\u0441\u0440\u0435\u0434\u043e\u0442\u0430\u0447\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u0438\u043c\u0435\u043d\u043d\u043e \u043d\u0430 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0435, \u0430 \u043d\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438.<\/p>\n<\/li>\n<li>\n<p>\u041d\u0430\u0434\u0435\u0436\u043d\u043e\u0441\u0442\u044c \u0431\u043e\u0442\u0430, \u043e\u043d \u0434\u043e\u043b\u0436\u0435\u043d \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c 24 \u043d\u0430 7. \u042d\u0442\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043e, \u043f\u0430\u0434\u0430\u0435\u0442 \u0431\u0438\u043d\u0430\u043d\u0441 \u043d\u043e \u043d\u0435 \u0431\u043e\u0442.   <\/p>\n<\/li>\n<li>\n<p>\u041f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c, \u0441\u0435\u0439\u0447\u0430\u0441 \u044f \u0442\u043e\u0440\u0433\u0443\u044e 350 \u043f\u0430\u0440\u0430\u043c\u0438 \u043a\u0440\u0438\u043f\u0442\u043e\u0432\u0430\u043b\u044e\u0442 \u0432 \u043f\u0430\u0440\u0435 \u043a USDT \u0438 \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u0441 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u044e, \u043d\u0435\u0442. \u0420\u0430\u0437 \u0432 \u043c\u0438\u043d\u0443\u0442\u0443 \u044f \u043e\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u044e \u0431\u0438\u0440\u0436\u0443 \u043f\u043e \u044d\u0442\u0438\u043c \u043f\u0430\u0440\u0430\u043c \u0438 \u0432 \u0442\u0435\u0447\u0435\u043d\u0438\u0438 30 \u0441\u0435\u043a\u0443\u043d\u0434 \u0432\u0441\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e \u0432\u0441\u0435\u043c \u043f\u0430\u0440\u0430\u043c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u044b. \u0417\u0430\u043f\u0430\u0441 \u043f\u0440\u043e\u0447\u043d\u043e\u0441\u0442\u0438 \u0435\u0449\u0435 \u0435\u0441\u0442\u044c.<\/p>\n<\/li>\n<li>\n<p>\u041b\u0435\u0433\u043a\u043e\u0441\u0442\u044c \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. \u0412\u0441\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0430 \u043d\u0430 pgsql, \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u0438\u043c\u043f\u043e\u0440\u0442 \u044d\u043a\u0441\u043f\u043e\u0440\u0442. \u041f\u0440\u043e\u0431\u043b\u0435\u043c \u0441 \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u043d\u0435\u0442.<\/p>\n<\/li>\n<\/ol>\n<h3>\u041f\u043e\u0447\u0435\u043c\u0443 Postgres<\/h3>\n<ol>\n<li>\n<p>\u0423\u0434\u043e\u0431\u043d\u044b\u0439 \u043f\u0430\u043a\u0435\u0442 pgsql-http \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u0431\u0449\u0430\u0442\u044c\u0441\u044f \u0441 \u0432\u043d\u0435\u0448\u043d\u0438\u043c \u043c\u0438\u0440\u043e\u043c \u0438\u0437 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u043d\u044b\u0445 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440.<\/p>\n<\/li>\n<li>\n<p>\u0411\u044b\u0441\u0442\u0440\u0430\u044f \u0438 \u0443\u0434\u043e\u0431\u043d\u0430\u044f \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 json.<\/p>\n<\/li>\n<li>\n<p>\u0411\u043e\u043b\u044c\u0448\u043e\u0439 \u043d\u0430\u0431\u043e\u0440 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0439.<\/p>\n<\/li>\n<li>\n<p>\u0423\u0434\u043e\u0431\u043d\u044b\u0439 \u043f\u0430\u043a\u0435\u0442 dblink \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0438\u0439 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u043c\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432 postgres.<\/p>\n<\/li>\n<li>\n<p>Sql \u043f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u044b\u0439 \u044f\u0437\u044b\u043a \u0434\u043b\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438, \u044d\u0442\u043e \u0432\u0430\u0436\u043d\u043e \u043a\u043e\u0433\u0434\u0430 \u0432\u0434\u0440\u0443\u0433 \u0434\u0432\u0430 \u0438\u043b\u0438 \u0442\u0440\u0438 \u0431\u043e\u0442\u0430 \u0440\u0435\u0448\u0430\u0442 \u0432 \u043e\u0434\u0438\u043d \u043c\u043e\u043c\u0435\u043d\u0442 \u043a\u0443\u043f\u0438\u0442\u044c \u0438\u043b\u0438 \u043f\u0440\u043e\u0434\u0430\u0442\u044c \u0441\u0432\u043e\u0439 \u0430\u043a\u0442\u0438\u0432.<\/p>\n<\/li>\n<li>\n<p>\u0423\u0434\u043e\u0431\u043d\u044b\u0439 IDE \u0432 \u0432\u0438\u0434\u0435 pgadmin, \u0441 \u043b\u044e\u0431\u043e\u0433\u043e \u0440\u0430\u0431\u043e\u0447\u0435\u0433\u043e \u043c\u0435\u0441\u0442\u0430 \u043c\u043e\u0436\u043d\u043e \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u044f \u0447\u0435\u0440\u0435\u0437 \u0431\u0440\u0430\u0443\u0437\u0435\u0440, \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u043a\u043e\u0434\u043e\u043c.   <\/p>\n<\/li>\n<li>\n<p>\u042f \u0437\u043d\u0430\u044e \u0438 \u043b\u044e\u0431\u043b\u044e postgres \u043a\u0430\u043a \u0432 \u043f\u0440\u043e\u0447\u0435\u043c \u0438 oracle, \u043d\u043e oracle \u0437\u0430 \u043b\u044e\u0431\u043e\u0432\u044c \u0434\u0435\u043d\u0435\u0433 \u0445\u043e\u0447\u0435\u0442.<\/p>\n<\/li>\n<\/ol>\n<p>\u041a\u0430\u043a \u043f\u0440\u0438\u043c\u0435\u0440 \u0432\u044b\u0448\u0435 \u0441\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u0432\u043e\u0436\u0443 \u0437\u0430\u043f\u0440\u043e\u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043e\u0431\u044a\u0451\u043c \u0432 \u0441\u0442\u0430\u043a\u0430\u043d\u0435 \u0431\u0438\u043d\u0430\u043d\u0441\u0430\u00a0 \u043d\u0430 \u043f\u043e\u043a\u0443\u043f\u043a\u0443 \u0441 \u043e\u0442\u043a\u043b\u043e\u043d\u0435\u043d\u0438\u0435\u043c \u0432 3% \u0432\u043d\u0438\u0437 \u0438 \u0432 \u0432\u0435\u0440\u0445.   <\/p>\n<pre><code class=\"pgsql\">WITH depth AS (SELECT (content::jsonb)->'asks' a, (content::jsonb)->'bids' b FROM        http_get('https:\/\/api.binance.com\/api\/v1\/depth?symbol=BTCUSDT&amp;limit=5000'))   SELECT       (SELECT va  FROM (         SELECT (j->>0)::float8 pa, sum((j->>1)::float8) OVER (ORDER BY j->>0) va FROM               jsonb_array_elements(a) j) t WHERE pa &lt;= (a#>>'{0,0}')::float8 * 1.03 ORDER BY va DESC LIMIT 1) va,     (SELECT vb   FROM (         SELECT (j->>0)::float8 pb, sum((j->>1)::float8) OVER (ORDER BY j->>0 DESC) vb FROM               jsonb_array_elements(b) j) t WHERE pb >= (b#>>'{0,0}')::float8 * 0.97 ORDER BY vb DESC LIMIT 1) vb FROM depth <\/code><\/pre>\n<p>\u0410 \u0442\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u0432\u0441\u0435 \u0442\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0430 \u0434\u0440\u0443\u0433\u043e\u043c \u044f\u0437\u044b\u043a\u0435. \u041a\u043e\u043d\u0435\u0447\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f, \u043d\u043e \u0434\u0443\u043c\u0430\u044e \u0431\u0443\u0434\u0435\u0442 \u043d\u0435 \u0442\u0430\u043a \u0438\u0437\u044f\u0449\u043d\u043e.<\/p>\n<h3>\u041e\u0431\u0449\u0430\u044f \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u044b.<\/h3>\n<p>\u0421\u0438\u0441\u0442\u0435\u043c\u0430 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u043c\u043e\u0434\u0443\u043b\u0435\u0439<\/p>\n<ol>\n<li>\n<p>\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430, \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0430 \u043d\u0430\u00a0 pgsql.<\/p>\n<\/li>\n<li>\n<p>\u0411\u043e\u0442\u044b, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c\u044b\u0435 \u0441 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u043c \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u043e\u0432 \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u0431\u043e\u0442\u044b \u0434\u0435\u043b\u044f\u0442\u0441\u044f \u043d\u0430 \u0441\u043b\u0443\u0436\u0435\u0431\u043d\u044b\u0435 \u0438 \u0431\u043e\u0442\u044b \u0434\u043b\u044f \u0442\u043e\u0440\u0433\u043e\u0432\u043b\u0438. \u0411\u043e\u0442\u044b \u0434\u043b\u044f \u0442\u043e\u0440\u0433\u043e\u0432\u043b\u0438 \u0440\u0430\u0437\u0434\u0435\u043b\u044f\u044e\u0442\u0441\u044f \u043d\u0430 \u0431\u043e\u0442\u044b, \u0442\u043e\u0440\u0433\u0443\u044e\u0449\u0438\u0435 \u0432 LONG \u0438 \u0431\u043e\u0442\u044b, \u0442\u043e\u0440\u0433\u0443\u044e\u0449\u0438\u0435 \u0432 SHORT. \u0421\u043b\u0443\u0436\u0435\u0431\u043d\u044b\u0435 \u0431\u043e\u0442\u044b \u2014 \u044d\u0442\u043e \u0431\u043e\u0442 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0442\u0435\u043b\u0435\u0433\u0440\u0430\u043c\u043c \u0438 \u0431\u043e\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u0435\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c \u043e\u0431\u0449\u0443\u044e \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u044e \u0442\u043e\u0440\u0433\u043e\u0432\u043b\u0438 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u043f\u0430\u0440, \u0432 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u044f \u0435\u0433\u043e \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043d\u0435 \u0441\u043c\u043e\u0433 \u043e\u0442\u0432\u0435\u0442\u0438\u0442\u044c \u043d\u0430 \u0432\u043e\u043f\u0440\u043e\u0441, \u043d\u0430 \u0434\u043e \u043b\u0438 \u0441\u0432\u044f\u0437\u044b\u0432\u0430\u0442\u044c \u043c\u0435\u0436\u0434\u0443 \u0441\u043e\u0431\u043e\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0442\u043e\u0440\u0433\u043e\u0432 \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u043f\u0430\u0440\u0430\u043c\u0438. \u0421\u0435\u0439\u0447\u0430\u0441 \u043e\u043d\u0438 \u0443 \u043c\u0435\u043d\u044f \u0442\u043e\u0440\u0433\u0443\u044e\u0442\u0441\u044f \u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e. \u042d\u0442\u043e \u043a\u0430\u043a \u043f\u0440\u0438\u043c\u0435\u0440 \u0438\u0433\u0440\u044b \u0432 \u043a\u0430\u0437\u0438\u043d\u043e \u0432\u044b \u0438\u0433\u0440\u0430\u0435\u0442\u0435 \u0437\u0430 \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u0441\u0442\u043e\u043b\u0430\u043c\u0438, \u0438 \u0435\u0441\u043b\u0438 \u0432 \u0441\u0443\u043c\u043c\u0435 \u0432\u044b \u0432\u044b\u0438\u0433\u0440\u0430\u0439\u0442\u0435, \u043f\u0440\u0435\u043a\u0440\u0430\u0449\u0430\u0442\u044c \u0438\u0433\u0440\u0430\u0442\u044c \u0437\u0430 \u0432\u0441\u0435\u043c\u0438 \u0441\u0442\u043e\u043b\u0430\u043c\u0438 \u0438\u043b\u0438 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0442\u044c \u0438\u0433\u0440\u0430\u0442\u044c \u043d\u0430 \u0432\u0441\u0435\u0445 \u0441\u0442\u043e\u043b\u0430\u0445 \u0434\u0430\u043b\u044c\u0448\u0435. \u042d\u043c\u0443\u043b\u044f\u0442\u043e\u0440 \u043f\u043e\u043a\u0430\u0437\u0430\u043b \u043c\u043d\u0435 \u0447\u0442\u043e \u043b\u0443\u0447\u0448\u0435 \u0442\u043e\u0440\u0433\u043e\u0432\u0430\u0442\u044c \u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e \u043e\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 \u0442\u043e\u0440\u0433\u043e\u0432\u043b\u0438 \u0432 \u0434\u0440\u0443\u0433\u0438\u0445 \u043f\u0430\u0440\u0430\u0445, \u043d\u043e \u044f \u043d\u0435 \u0443\u0432\u0435\u0440\u0435\u043d, \u0447\u0442\u043e \u044d\u0442\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e. \u0411\u043e\u0442\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u044b \u043d\u0430 pgsql.<\/p>\n<\/li>\n<li>\n<p>\u0411\u043e\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0449\u0438\u0439 \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0438\u0437 pipe, \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043d\u0430\u00a0 pgsql.<\/p>\n<\/li>\n<li>\n<p>\u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0434\u043b\u044f \u043f\u043e\u0441\u044b\u043b\u043a\u0438 \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u043e\u0441\u0442\u0430\u043d\u043e\u0432, \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435, \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043d\u0430\u00a0 pgsql.<\/p>\n<\/li>\n<li>\n<p>\u041a\u043e\u043c\u0430\u043d\u0434\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0438 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0430 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b, \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u044b \u043d\u0430 bash.<\/p>\n<\/li>\n<\/ol>\n<p>\u0415\u0441\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u0431\u043e\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430\u0434\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0447\u0435\u0440\u0435\u0437 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0435 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u044b \u0432\u0440\u0435\u043c\u0435\u043d\u0438. \u0411\u043e\u0442 \u2014 \u044d\u0442\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u043d\u0430\u044f \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430 \u043d\u0430 pgsql. \u0411\u043e\u0442\u044b \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u044e\u0442\u0441\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u0441\u044f \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e, \u043a\u0430\u0436\u0434\u044b\u0439 \u0432 \u0441\u0432\u043e\u0435\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 postgres. \u0411\u043e\u0442\u044b \u0434\u0435\u043b\u044f\u0442\u0441\u044f \u043d\u0430 \u0434\u0432\u0430 \u043a\u043b\u0430\u0441\u0441\u0430 \u0442\u043e\u0440\u0433\u043e\u0432\u044b\u0435 \u0438 \u0441\u043b\u0443\u0436\u0435\u0431\u043d\u044b\u0435. \u0422\u043e\u0440\u0433\u043e\u0432\u044b\u0435 \u0431\u043e\u0442\u044b \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0435, \u043d\u043e \u043c\u043e\u0436\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0438 \u0440\u0430\u0437\u043d\u044b\u0435, \u043a\u0430\u0436\u0434\u044b\u0439 \u0442\u043e\u0440\u0433\u0443\u0435\u0442 \u0441\u0432\u043e\u0435\u0439 \u043f\u0430\u0440\u043e\u0439 \u043a\u0440\u0438\u043f\u0442\u043e\u0432\u0430\u043b\u044e\u0442. \u0421\u043b\u0443\u0436\u0435\u0431\u043d\u044b\u0445 \u0431\u043e\u0442\u043e\u0432 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e, \u0431\u043e\u0442 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0442\u0435\u043b\u0435\u0433\u0440\u0430\u043c\u043c, \u0431\u043e\u0442 \u0434\u043b\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 (\u044d\u043c\u0443\u043b\u044f\u0446\u0438\u044f \u0430\u0432\u0442\u043e\u043d\u043e\u043c\u043d\u044b\u0445 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0439), \u0442\u0430\u043a\u0438\u0435 \u043a\u0430\u043a \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438\u043b\u0438 \u0432\u044b\u0432\u043e\u0434 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0432 \u0442\u0435\u043b\u0435\u0433\u0440\u0430\u043c\u043c \u0438 \u043f\u0440\u043e\u0447\u0438\u0435 \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0431\u043e\u0442\u044b.\u00a0 \u0413\u043b\u0430\u0432\u043d\u0430\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u0431\u043e\u0442\u044b \u0432 \u0446\u0438\u043a\u043b\u0435, \u0441 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u043c \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u043e\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u0438. \u041c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u0442\u0430\u043a \u0447\u0442\u043e \u0431\u044b \u043a\u0430\u0436\u0434\u044b\u0439 \u0431\u043e\u0442 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u043b \u0432\u0440\u0435\u043c\u044f, \u043a\u043e\u0433\u0434\u0430 \u0435\u0433\u043e \u043d\u0430\u0434\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c, \u043d\u043e \u044d\u0442\u043e \u044f \u043e\u0442\u043b\u043e\u0436\u0438\u043b \u043d\u0430 \u0431\u0443\u0434\u0443\u0449\u0435\u0435.<\/p>\n<pre><code class=\"pgsql\">CREATE TABLE crypto_bot2.bots (     key text primary key,     name text ,     params jsonb,     is_run boolean,     comment text  )   <\/code><\/pre>\n<p>\u0412 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 bots \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442\u0441\u044f \u0441\u043f\u0438\u0441\u043e\u043a \u0431\u043e\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c\u0441\u044f. Key \u2013 \u044d\u0442\u043e \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u043a\u043b\u044e\u0447 \u0431\u043e\u0442\u0430, \u0434\u043b\u044f \u0442\u043e\u0440\u0433\u043e\u0432\u044b\u0445 \u0431\u043e\u0442\u043e\u0432 \u043e\u043d \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u0438\u043c\u044f \u0442\u043e\u0440\u0433\u043e\u0432\u043e\u0439 \u043f\u0430\u0440\u044b, name \u0438\u043c\u044f \u0431\u043e\u0442\u0430, \u0438\u043c\u044f \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u043d\u043e\u0439 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b, params \u2013 \u044d\u0442\u043e \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0431\u043e\u0442\u0430 \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u043e\u043d \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, is_run \u0444\u043b\u0430\u0433 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0431\u043e\u0442 \u043d\u0430\u0434\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0438\u043b\u0438 \u043d\u0435\u0442, \u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u043f\u043e\u043b\u0435 \u2014 \u044d\u0442\u043e \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439. \u0412\u043e\u0442 \u043a\u0430\u043a \u0432\u0435\u0440\u0445\u043d\u044f\u044f \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0447\u0430\u0441\u0442\u044c \u0434\u0430\u043d\u043d\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b. \u0412 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u0441\u044f \u043a\u0430\u043a \u0441\u043b\u0443\u0436\u0435\u0431\u043d\u044b\u0435 \u0431\u043e\u0442\u044b, \u0442\u0430\u043a \u0438 \u0431\u043e\u0442\u044b \u0434\u043b\u044f \u0442\u043e\u0440\u0433\u043e\u0432\u043b\u0438. \u0411\u043e\u0442\u044b \u0434\u043b\u044f \u0442\u043e\u0440\u0433\u043e\u0432\u043b\u0438 \u0434\u0435\u043b\u044f\u0442\u0441\u044f \u043d\u0430 \u0442\u043e\u0440\u0433\u0443\u044e\u0449\u0438\u0435 \u0432 Long \u0438 Short. \u0414\u043b\u044f \u0442\u043e\u0440\u0433\u043e\u0432\u043b\u0438 \u0432 Short \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e \u043c\u043e\u043d\u0435\u0442\u044b DOWN \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 binance, \u043d\u043e \u0432 \u0431\u0443\u0434\u0443\u0449\u0435\u043c \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u044e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u043c\u0430\u0440\u0436\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u0442\u043e\u0440\u0433\u043e\u0432\u043b\u0435\u0439, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439 \u0431\u043e\u043b\u044c\u0448\u0435. \u0412\u043e\u0442 \u043a\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u0432 \u0431\u0430\u0437\u0435.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/e51\/6ce\/776\/e516ce776d9bff0d67f6a9a048fccca5.png\" width=\"1920\" height=\"1040\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/e51\/6ce\/776\/e516ce776d9bff0d67f6a9a048fccca5.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0447\u0430\u0441\u0442\u044c \u043a\u043e\u0434\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u044d\u0442\u0438 \u0431\u043e\u0442\u044b, \u0434\u0430\u043b\u044c\u0448\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d \u043f\u043e\u043b\u043d\u044b\u0439 \u043a\u043e\u0434 \u0433\u043b\u0430\u0432\u043d\u043e\u0439 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b. <\/p>\n<pre><code class=\"pgsql\">bot_cmd = CASE WHEN is_restart THEN 'restart' ELSE 'start' END;     LOOP         wt = clock_timestamp();         SELECT * INTO st FROM  crypto_bot2.bot_state t ;         IF (st.status = 'STOP') THEN            bot_cmd = 'stop';        ELSE IF (clock_timestamp() - start_time > restart_interval)THEN            SELECT count(*) INTO wi FROM crypto_bot2.bots WHERE params->>'buy_price' IS NOT NULL;            IF (wi = 0 OR clock_timestamp() - start_time > restart_interval * 5) THEN                bot_cmd = 'pre_restart';            END IF;     END IF; END IF;     FOR bot IN (SELECT * FROM crypto_bot2.bots WHERE is_run) LOOP     dblnk = dblinks->bot.key;     IF (dblnk IS NULL) THEN             dblnk = 'dblink_' || bot.key;             PERFORM crypto_bot2.create_dblink(dblnk);             PERFORM dblink_exec(dblnk, format('CALL crypto_bot2.init_bot(''%s'')', dblnk));             dblinks = CASE WHEN dblinks IS NULL THEN hstore(bot.key, dblnk)                ELSE dblinks || hstore(bot.key, dblnk) END;          END IF;         IF (dblink_is_busy(dblnk) = 0) THEN              PERFORM crypto_bot2.clear_dblink(dblnk);              PERFORM dblink_send_query(dblnk, format('SELECT crypto_bot2.%s(''%s'', ''%s'')', bot.name, bot.key,              bot_cmd));         END IF;     END LOOP;     EXIT WHEN bot_cmd IN ('stop', 'pre_restart');     wi = req_time - EXTRACT(epoch FROM(clock_timestamp() - wt));     IF (wi > 0) THEN         PERFORM pg_sleep(wi);     END IF;     bot_cmd = 'work'; END LOOP; FOR bot IN (SELECT * FROM each(dblinks)) LOOP     PERFORM dblink_disconnect(bot.value); END LOOP; <\/code><\/pre>\n<p>\u041a\u0430\u043a \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0432\u0438\u0434\u0435\u0442\u044c \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u0439 \u0437\u0430\u043f\u0443\u0441\u043a \u0447\u0435\u0440\u0435\u0437 dblink_send_query, \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 \u0431\u043e\u0442\u0443 \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442\u0441\u044f \u0435\u0433\u043e key. \u0414\u0430\u043d\u043d\u044b\u0439 \u0446\u0438\u043a\u043b \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0440\u0430\u0437 \u0432 5 \u0441\u0435\u043a\u0443\u043d\u0434. \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u0443\u044e \u0447\u0430\u0441\u0442\u044c, \u043a\u043e\u0433\u0434\u0430 \u0431\u043e\u0442\u0430.<\/p>\n<pre><code class=\"pgsql\">BEGIN     SELECT params INTO p_params FROM crypto_bot2.bots WHERE key=p_pair;     save_params = p_params;     last_call = current_setting(last_call_key, true)::timestamptz;     IF (last_call IS NULL OR (clock_timestamp() - last_call) > '55S'::interval          OR clock_timestamp() - date_trunc('minute', clock_timestamp()) &lt; '5S'::interval) THEN <\/code><\/pre>\n<p>\u0412\u043d\u0430\u0447\u0430\u043b\u0435 \u0431\u043e\u0442 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0441\u0432\u043e\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0438\u0437 \u0442\u0430\u0431\u043b\u0438\u0446\u044b bots \u0438 \u0437\u0430\u0442\u0435\u043c \u0441\u043c\u043e\u0442\u0440\u0438\u0442, \u043a\u043e\u0433\u0434\u0430 \u0435\u0433\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0440\u0430\u0437 \u0432\u044b\u0437\u044b\u0432\u0430\u043b\u0438 \u0438 \u0435\u0441\u043b\u0438 \u043f\u0440\u043e\u0448\u043b\u043e \u043c\u0435\u043d\u044c\u0448\u0435 55 \u0441\u0435\u043a\u0443\u043d\u0434, \u0442\u043e \u043f\u0440\u0435\u043a\u0440\u0430\u0449\u0430\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c, \u0431\u043e\u0442 \u0434\u043b\u044f \u0442\u0435\u043b\u0435\u0433\u0440\u0430\u043c\u043c\u0430 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u043a\u0430\u0436\u0434\u044b\u0435 5 \u0441\u0435\u043a\u0443\u043d\u0434 \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u043d\u0435 \u043f\u0440\u0438\u0441\u043b\u0430\u043b\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u043e\u0442 \u0445\u043e\u0437\u044f\u0438\u043d\u0430 \u0438\u043b\u0438 \u043d\u0435 \u043d\u0430\u0434\u043e \u043b\u0438 \u0447\u0442\u043e \u0441\u043e\u043e\u0431\u0449\u0438\u0442\u044c \u0445\u043e\u0437\u044f\u0438\u043d\u0443. \u00a0\u0412 \u043a\u043e\u043d\u0446\u0435 \u0440\u0430\u0431\u043e\u0442\u044b \u0431\u043e\u0442\u0430, \u0431\u043e\u0442 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 bots \u0447\u0442\u043e \u0431\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438\u0445 \u043f\u0440\u0438 \u043d\u043e\u0432\u043e\u043c \u0432\u044b\u0437\u043e\u0432\u0435.<\/p>\n<pre><code class=\"pgsql\">IF (save_params != p_params) THEN       UPDATE crypto_bot2.bots SET params = p_params WHERE key=p_pair; END IF;<\/code><\/pre>\n<p>\u0421\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u0441\u0434\u0435\u043b\u0430\u043d\u043e \u043f\u043e \u0434\u0432\u0443\u043c \u043f\u0440\u0438\u0447\u0438\u043d\u0430\u043c, \u043f\u0435\u0440\u0432\u043e\u0435 \u0432 postgresql \u043d\u0435\u0442 \u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u0433\u0434\u0435 \u043c\u043e\u0436\u043d\u043e \u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0443\u0434\u043e\u0431\u043d\u043e \u0441\u0435\u0441\u0441\u0438\u043e\u043d\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0438 \u0432\u0442\u043e\u0440\u043e\u0435 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0431\u043e\u0442\u0430 \u0441\u0435\u0441\u0441\u0438\u043e\u043d\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043d\u0430\u0441 \u043d\u0435 \u0441\u043f\u0430\u0441\u0443\u0442. \u041f\u0440\u043e\u0448\u0443 \u043f\u0440\u043e\u0449\u0435\u043d\u0438\u044f \u0435\u0441\u043b\u0438 \u043d\u0435 \u0441\u0443\u043c\u0435\u043b \u0434\u043e\u043d\u0435\u0441\u0442\u0438 \u043e\u0441\u043d\u043e\u0432\u043d\u0443\u044e \u0438\u0434\u0435\u044e, \u043d\u043e \u0434\u0443\u043c\u0430\u044e \u0435\u0441\u043b\u0438 \u0432\u044b \u0441\u0443\u043c\u0435\u0435\u0442\u0435 \u043f\u0440\u043e\u0447\u0435\u0441\u0442\u044c \u0434\u043e \u043a\u043e\u043d\u0446\u0430, \u0442\u043e \u0432\u0441\u0435 \u043f\u0440\u043e\u044f\u0441\u043d\u0438\u0442\u0441\u044f.<\/p>\n<h3>\u041f\u0430\u043a\u0435\u0442 pgsql-http<\/h3>\n<p><a href=\"https:\/\/github.com\/pramsey\/pgsql-http\" rel=\"noopener noreferrer nofollow\">https:\/\/github.com\/pramsey\/pgsql-http<\/a><\/p>\n<p>\u042d\u0442\u043e \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e \u0434\u043b\u044f \u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0441 \u0432\u043d\u0435\u0448\u043d\u0438\u043c \u043c\u0438\u0440\u043e\u043c.\u00a0 \u042f \u0441\u0434\u0435\u043b\u0430\u043b \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0443\u044e \u043e\u0431\u0435\u0440\u0442\u043a\u0443 \u0434\u043b\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043e\u0448\u0438\u0431\u043e\u043a \u0441\u0435\u0442\u0438. \u0425\u043e\u0447\u0443 \u043f\u043e\u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u0438\u0442\u044c \u0430\u0432\u0442\u043e\u0440\u0430 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f. \u041e\u0431\u0435\u0440\u0442\u043a\u0430 \u0434\u043b\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f https \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432, \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u043f\u0440\u043e\u0431\u0443\u0435\u043c \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441 .<\/p>\n<pre><code class=\"pgsql\">CREATE OR REPLACE FUNCTION crypto_bot2.https_get(     url text,     params hstore DEFAULT ''::hstore,     OUT status integer, OUT content text) RETURNS record     LANGUAGE 'plpgsql' AS $BODY$ DECLARE     r record;     error text; BEGIN     url = url || CASE WHEN array_length(akeys(params), 1) > 0 THEN '?' ELSE '' END;     FOR r IN SELECT key, value FROM  each(params) LOOP         url = url || '&amp;' || r.key || '=' || urlencode(r.value);     END LOOP;     BEGIN         SELECT h.status, h.content INTO status, content FROM http_get(url) h;         IF (status != 200) THEN             PERFORM pg_sleep(1);             SELECT h.status, h.content INTO status, content FROM http_get(url) h;         END IF;     EXCEPTION WHEN OTHERS THEN              PERFORM pg_sleep(1);              SELECT h.status, h.content INTO status, content FROM http_get(url) h;     END;     IF (status != 200) THEN         RAISE EXCEPTION  USING HINT = url,  ERRCODE = 'BW002', MESSAGE = 'Http status =' || status;     END IF; EXCEPTION WHEN OTHERS THEN     GET STACKED DIAGNOSTICS error = MESSAGE_TEXT;     RAISE EXCEPTION  USING HINT = url, ERRCODE = 'BW002', MESSAGE = error; END; $BODY$;<\/code><\/pre>\n<h3>\u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0442\u0435\u043b\u0435\u0433\u0440\u0430\u043c\u043c<\/h3>\n<p>\u0412\u044b\u0448\u0435 \u044f \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u043b \u043e \u0443\u0434\u043e\u0431\u043d\u043e\u043c \u043f\u0430\u043a\u0435\u0442\u0435 pgsql-http. \u00a0\u041d\u0430 \u043d\u0435\u043c \u0434\u0435\u0440\u0436\u0438\u0442\u0441\u044f \u0432\u0441\u0435 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0441 \u0432\u043d\u0435\u0448\u043d\u0438\u043c \u043c\u0438\u0440\u043e\u043c. \u0414\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0431\u043e\u0442\u043e\u043c \u044f \u0432\u044b\u0431\u0440\u0430\u043b \u043c\u0435\u0441\u0441\u0435\u043d\u0434\u0436\u0435\u0440 \u0442\u0435\u043b\u0435\u0433\u0440\u0430\u043c\u043c. \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043e\u043d \u043e\u0431\u043b\u0430\u0434\u0430\u0435\u0442 \u0441\u0430\u043c\u044b\u043c \u0443\u0434\u043e\u0431\u043d\u044b\u043c API. \u042f \u043d\u0435 \u0431\u0443\u0434\u0443 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0448\u0430\u0433\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0431\u043e\u0442\u0430 \u0432 \u0442\u0435\u043b\u0435\u0433\u0440\u0430\u043c\u043c\u0435, \u0432 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u043a \u043d\u0435\u043c\u0443 \u0432\u0441\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043e, \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u043a\u0430\u0436\u0443 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b \u0434\u043b\u044f \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c \u0442\u0435\u043b\u0435\u0433\u0440\u0430\u043c\u043c\u0430.<\/p>\n<pre><code class=\"pgsql\">CREATE OR REPLACE FUNCTION crypto_bot2.tlg_call_server(     method text,     params hstore DEFAULT ''::hstore)     RETURNS json     LANGUAGE 'plpgsql' AS $BODY$ DECLARE     url text = 'https:\/\/api.telegram.org\/botXXXX:YYYYYYYY\/';      j json;      http_status int;      sql_state text;     sql_msg text;     sql_hint text; BEGIN     url = url || method;     SELECT status, content::json INTO http_status, j FROM  crypto_bot2.https_get(url, params);     RETURN j; EXCEPTION WHEN OTHERS THEN GET STACKED DIAGNOSTICS     sql_state = RETURNED_SQLSTATE,     sql_msg = MESSAGE_TEXT,     sql_hint = PG_EXCEPTION_HINT;     PERFORM crypto_bot2.tlg_error('%s %s %s', sql_state, sql_msg, sql_hint);     RETURN null; END; $BODY$;<\/code><\/pre>\n<p>\u041f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430 \u0434\u043b\u044f \u043e\u0442\u0441\u044b\u043b\u043a\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a<\/p>\n<pre><code class=\"pgsql\">CREATE OR REPLACE FUNCTION crypto_bot2.tlg_send_msg(     chat_id text,     msg text,     VARIADIC param text[] DEFAULT NULL::text[])     RETURNS json     LANGUAGE 'plpgsql' AS $BODY$ BEGIN     RETURN  crypto_bot2.tlg_call_server('sendMessage',  hstore(array['chat_id', chat_id::text, 'text',  format(msg, VARIADIC param)])); END; $BODY$;<\/code><\/pre>\n<p>\u0411\u043e\u0442 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0442\u0435\u043b\u0435\u0433\u0440\u0430\u043c\u043c.<\/p>\n<pre><code class=\"pgsql\">CREATE OR REPLACE FUNCTION2 crypto_bot2.tlg_bot(key text, cmd text)     RETURNS integer     LANGUAGE 'plpgsql' AS $BODY$ DECLARE     u_id int8;     params hstore ;     msgs json;     m json;     jt json;     user_id int8;     send_text text;     send_ids int8[];     s text;     sql_state text;     sql_msg text;     sql_hint text;     st record;     r record;     pr float8;     btc float8;     usd float8;     c int; BEGIN     IF (cmd = 'start') THEN         LOOP             msgs = crypto_bot2.tlg_call_server('getUpdates') j;             EXIT WHEN msgs->>'ok' = 'true';         END LOOP;         FOR m IN SELECT json_array_elements(msgs->'result') LOOP              u_id = m->>'update_id';         END LOOP;         DELETE FROM crypto_bot2.tlg_state;         INSERT INTO crypto_bot2.tlg_state(tlg_error_on, tlg_warning_on, tlg_log_on, tlg_update_id)         VALUES(true, false, true, u_id);         DELETE FROM crypto_bot2.tlg_messages;                 RETURN 0;     END IF;      SELECT * INTO st FROM crypto_bot2.tlg_state;      u_id = st.tlg_update_id + 1;      params = (CASE WHEN (u_id IS NOT NULL) THEN 'offset=>\"' || u_id || '\"' ELSE '' END)::hstore ||              'timeout=>4'::hstore;      msgs = crypto_bot2.tlg_call_server('getUpdates', params);      u_id = null;      IF (msgs->>'ok' = 'true') THEN          FOR m IN SELECT json_array_elements(msgs->'result') LOOP              u_id = (m->>'update_id')::int8;              user_id = coalesce(m#>>'{message,from,id}',m#>>'{callback_query,from,id}')::int8;              IF (user_id  != crypto_bot2.tlg_my_id()::int4) THEN                  jt = crypto_bot2.tlg_send_msg(user_id::text, '%s %s \u043d\u0435 \u043c\u0435\u0448\u0430\u0439 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c, \u0430 \u0442\u043e \u0445\u043e\u0437\u044f\u0438\u043d\u0443 \u043f\u043e\u0436\u0430\u043b\u0443\u044e\u0441\u044c',  m#>>'{message,from,first_name}', m#>>'{message,from,last_name}');  jt = crypto_bot2.tlg_send_msg(crypto_bot2.tlg_my_id(), '%s %s \u043b\u0435\u0437\u0435\u0442 \u043d\u0435 \u0442\u0443\u0434\u0430 ',  m#>>'{message,from,first_name}', m#>>'{message,from,last_name}');              ELSE                   SELECT * INTO r FROM crypto_bot2.binance_state2 bs; CASE coalesce(m#>>'{message,text}', '%@sell_command%&amp;')                 WHEN '%@sell_command%&amp;' THEN  -- \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043a\u043e\u043c\u0430\u043d\u0434                 WHEN '\/status' THEN WHEN '\/error' THEN     UPDATE crypto_bot2.tlg_state SET tlg_error_on = NOT tlg_error_on;      s = CASE WHEN NOT st.tlg_error_on                      THEN '\u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043e\u0431 \u043e\u0448\u0438\u0431\u043a\u0430\u0445 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u044b' ELSE '\u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043e\u0431 \u043e\u0448\u0438\u0431\u043a\u0430\u0445 \u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d\u044b' END; WHEN '\/war' THEN WHEN '\/risk' THEN WHEN '\/add_sup' THEN                 \u2026..  WHEN '\/trade_stop' THEN     UPDATE crypto_bot2.binance_state2 SET trade_status = 'STOP';     PERFORM crypto_bot2.log('\u0422\u043e\u0440\u0433\u043e\u0432\u043b\u044f \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0430');     s = '\u0421\u043f\u0430\u0441\u0438\u0431\u043e \u0445\u043e\u0437\u044f\u0438\u043d, \u043e\u0442\u0434\u044b\u0445\u0430\u044e';                WHEN '\/trade_start' THEN     UPDATE crypto_bot2.binance_state2 SET is_sell = false, trade_status = 'RUN';     PERFORM crypto_bot2.log('\u0422\u043e\u0440\u0433\u043e\u0432\u043b\u044f \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0435\u043d\u0430');     s = '\u041f\u043e\u0448\u0435\u043b \u043a\u043e\u043f\u0430\u0442\u044c'; WHEN '\/pgadmin_start' THEN     s = 'Pgadmin \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u0430\u043b';     COPY (SELECT 'password') TO PROGRAM 'sudo -S systemctl start httpd'; WHEN '\/pgadmin_stop' THEN     s = 'Pgadmin \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d';     COPY (SELECT 'password') TO PROGRAM 'sudo -S systemctl stop httpd'; ELSE                     s = '\u041e\u0439, \u0445\u043e\u0437\u044f\u0438\u043d \u043d\u0435 \u043e\u0442\u0432\u043b\u0435\u043a\u0430\u0439'; END CASE; IF (s IS NOT NULL) THEN     jt = crypto_bot2.tlg_send_msg(user_id::text, s); END IF;             END IF;         END LOOP;     END IF;     IF (u_id IS NOT NULL) THEN         UPDATE crypto_bot2.tlg_state SET tlg_update_id = u_id;     END IF;     SELECT array_agg(id), string_agg(msg, chr(10)) INTO send_ids, send_text FROM crypto_bot2.tlg_messages;     IF (send_text IS NOT NULL) THEN         FOR i IN 1.. (length(send_text)\/2048 + 1) LOOP              jt = crypto_bot2.tlg_send2_msg(substring(send_text, (i - 1) * 2048, 2048));              IF (jt->>'ok' != 'true') THEN                  EXIT;              END IF;         END LOOP;         IF (jt->>'ok' = 'true') THEN             DELETE FROM crypto_bot2.tlg_messages WHERE id IN (SELECT * FROM unnest(send_ids));         END IF;     END IF;     RETURN 0;     EXCEPTION WHEN OTHERS THEN           GET STACKED DIAGNOSTICS           sql_state = RETURNED_SQLSTATE,           sql_msg = MESSAGE_TEXT,           sql_hint = PG_EXCEPTION_HINT;     PERFORM crypto_bot2.tlg_error('%s %s %s', sql_state, sql_msg, sql_hint);      RETURN -1; END; $BODY$;<\/code><\/pre>\n<p>\u0411\u043e\u0442 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u0440\u0430\u0437 \u0432 5 \u0441\u0435\u043a\u0443\u043d\u0434 \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u043d\u043e\u0432\u044b\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043e\u0442 \u0442\u0435\u043b\u0435\u0433\u0440\u0430\u043c\u043c, \u0430 \u0442\u0430\u043a \u0436\u0435 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043e\u0442 \u0442\u043e\u0440\u0433\u043e\u0432\u044b\u0445 \u0431\u043e\u0442\u043e\u0432.<\/p>\n<h3>DBMS_PIPE \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430\u043c\u0438 pgsql<\/h3>\n<p>\u0412 ORACLE \u0435\u0441\u0442\u044c \u0443\u0434\u043e\u0431\u043d\u0430\u044f \u0432\u0435\u0449\u044c, \u044d\u0442\u043e \u0430\u0432\u0442\u043e\u043d\u043e\u043c\u043d\u044b\u0435 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438. \u0414\u043b\u044f \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u043e\u043d\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b, \u0438\u043d\u0430\u0447\u0435 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u043f\u0440\u043e\u0438\u0437\u043e\u0439\u0434\u0435\u0442 rollback, \u0438 \u0432\u044b \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0443\u0432\u0438\u0434\u0438\u0442\u0435. \u0412\u043d\u0430\u0447\u0430\u043b\u0435 \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b dblink, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043b \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441, \u0434\u043b\u044f \u044d\u043c\u0443\u043b\u044f\u0446\u0438\u0438 \u0430\u0432\u0442\u043e\u043d\u043e\u043c\u043d\u043e\u0439 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438, \u043d\u043e \u044d\u0442\u043e \u0431\u044b\u043b\u043e \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u043a\u0440\u0430\u0441\u0438\u0432\u043e, \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0447\u0442\u043e-\u0442\u043e \u0431\u043e\u043b\u0435\u0435 \u0438\u0437\u044f\u0449\u043d\u043e\u0433\u043e. \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0431\u044b\u043b \u043d\u0430\u043f\u0438\u0441\u0430\u043d dbms_pipe \u0434\u043b\u044f postgres.<\/p>\n<p>\u0421\u043e\u0437\u0434\u0430\u0435\u043c fifo mkfifo crypto_bot_pipe.<\/p>\n<p>\u0421\u043e\u0437\u0434\u0430\u0435\u043c \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0443 \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f \u0438\u0437 pipe .<\/p>\n<pre><code class=\"pgsql\">CREATE OR REPLACE PROCEDURE crypto_bot2.async_cmd_bot() LANGUAGE 'plpgsql' AS $BODY$ DECLARE     cmd text;     rc record;     sql_state text;     sql_msg text;     sql_hint text; BEGIN     CREATE TEMP TABLE IF NOT EXISTS msg_table(msg text);     LOOP         COPY msg_table FROM '\/var\/lib\/pgsql\/crypto_bot_pipe';         FOR rc IN (SELECT * FROM msg_table) LOOP             cmd = rc.msg;             IF (cmd = 'stop') THEN                 EXIT;             ELSE                BEGIN     EXECUTE cmd; EXCEPTION WHEN OTHERS THEN     GET STACKED DIAGNOSTICS         sql_state = RETURNED_SQLSTATE,         sql_msg = MESSAGE_TEXT,         sql_hint = PG_EXCEPTION_HINT;             -- \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043e\u0448\u0438\u0431\u043a\u0438 END; COMMIT;             END IF;         END LOOP;         TRUNCATE msg_table;         EXIT WHEN cmd ='stop';     END LOOP; END; $BODY$;<\/code><\/pre>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043a\u043e\u043c\u0430\u043d\u0434\u0443 copy \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f \u0438\u0437 pipe \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0438 \u0437\u0430\u0442\u0435\u043c \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u043c \u043f\u043e \u044d\u0442\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c sql \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u0438 \u0442\u0430\u043a \u0434\u043e \u0442\u0435\u0445 \u043f\u043e\u0440, \u043f\u043e\u043a\u0430 \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u043a\u043e\u043c\u0430\u043d\u0434\u0443 stop.\u00a0 \u041e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u0441\u0442\u0430\u0432\u0442\u0435 \u0432\u043d\u0443\u0442\u0440\u0438 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b commit \u0438\u043d\u0430\u0447\u0435 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0443\u0432\u0435\u0434\u0438\u0442\u0435 \u0432 \u0434\u0440\u0443\u0433\u0438\u0445 \u0441\u0435\u0441\u0441\u0438\u044f\u0445. \u0421\u0435\u0439\u0447\u0430\u0441 \u043f\u043e\u043a\u0430\u0436\u0443 \u043a\u0430\u043a \u044d\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c.<\/p>\n<p>\u0421\u043e\u0437\u0434\u0430\u0435\u043c \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0443 \u0434\u043b\u044f \u0437\u0430\u043f\u0438\u0441\u0438 \u0432 pipe.<\/p>\n<pre><code class=\"pgsql\">CREATE OR REPLACE FUNCTION crypto_bot2.send_async_cmd(cmd text)     RETURNS integer     LANGUAGE 'plpgsql'     AS $BODY$ BEGIN     EXECUTE format('COPY (SELECT %s) TO PROGRAM ''cat >>\/var\/lib\/pgsql\/crypto_bot_pipe''', quote_literal(cmd));      RETURN 0; END; $BODY$; <\/code><\/pre>\n<p>\u041a\u0430\u043a \u0432\u0438\u0434\u0438\u043c \u0432\u0441\u0435 \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0441\u0442\u043e, \u043d\u043e \u044d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043d\u0435\u043a\u0438\u0439 \u0430\u043d\u0430\u043b\u043e\u0433 \u0430\u0432\u0442\u043e\u043d\u043e\u043c\u043d\u044b\u0445 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0439, \u0447\u0442\u043e \u043c\u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u043c\u043e\u0433\u043b\u043e. \u042d\u0442\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0434\u043e \u0441\u0438\u0445 \u043f\u043e\u0440 \u043c\u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u043d\u0440\u0430\u0432\u0438\u0442\u0441\u044f.<\/p>\n<h3>\u0412\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0445 \u043a\u043e\u043c\u0430\u043d\u0434 \u0438\u0437 pgsql<\/h3>\n<p>\u0412 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0431\u043e\u0442\u0430, \u043c\u043d\u0435 \u0437\u0430\u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0438 \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c pgadmin \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0431\u043e\u0442\u0430 \u0442\u0435\u043b\u0435\u0433\u0440\u0430\u043c\u043c, \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0430\u0434\u043e \u0431\u044b\u043b\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0438\u0437 pgsql. \u0421\u0434\u0435\u043b\u0430\u043d\u043e \u044d\u0442\u043e \u0431\u044b\u043b\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c<\/p>\n<pre><code class=\"pgsql\">COPY (SELECT 'root password') TO PROGRAM 'sudo -S systemctl start httpd';<\/code><\/pre>\n<h3>\u041b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439 \u0431\u043e\u0442\u0430<\/h3>\n<p>\u0421\u0438\u0441\u0442\u0435\u043c\u0430 \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u0434\u0440\u0430\u0437\u0443\u043c\u0435\u0432\u0430\u0435\u0442 \u0444\u0438\u043a\u0441\u0430\u0446\u0438\u044e \u043e\u0448\u0438\u0431\u043e\u043a \u0431\u043e\u0442\u0430 \u0438 \u0435\u0433\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u043e \u043f\u043e\u043a\u0443\u043f\u043a\u0438 \u0438\u043b\u0438 \u043f\u0440\u043e\u0434\u0430\u0436\u0438 \u043a\u0440\u0438\u043f\u0442\u043e\u0432\u0430\u043b\u044e\u0442\u044b. \u041b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u043c. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u0440\u043e\u0434\u0430\u0436\u0438 \u043a\u0440\u0438\u043f\u0442\u043e\u0432\u0430\u043b\u044e\u0442\u044b \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u0432\u044b\u0432\u0435\u0441\u0442\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0432 \u0442\u0435\u043b\u0435\u0433\u0440\u0430\u043c\u043c, \u0430 \u0441\u0435\u0440\u0432\u0435\u0440 \u0442\u0435\u043b\u0435\u0433\u0440\u0430\u043c\u043c\u0430 \u043d\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u0432 \u044d\u0442\u043e\u0442 \u043c\u043e\u043c\u0435\u043d\u0442. \u0415\u0441\u043b\u0438 \u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e, \u0442\u043e \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0437\u0430\u0432\u0438\u0441\u043d\u0443\u0442\u044c \u0432 \u0434\u0430\u043d\u043d\u043e\u0439 \u0442\u043e\u0447\u043a\u0435 \u0438 \u0436\u0434\u0430\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u0438 \u0442\u0435\u043b\u0435\u0433\u0440\u0430\u043c\u043c\u0430, \u0447\u0442\u043e \u0434\u043b\u044f \u043d\u0430\u0441 \u043d\u0435 \u043f\u0440\u0438\u0435\u043c\u043b\u0435\u043c\u043e. \u041c\u044b \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u044d\u043c\u0443\u043b\u044f\u0446\u0438\u044e \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u0430 \u0430\u0432\u0442\u043e\u043d\u043e\u043c\u043d\u044b\u0445 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0439, \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u0443\u044e \u0432\u044b\u0448\u0435 \u0438 \u0437\u0430\u0442\u0435\u043c \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0442\u0440\u0438\u0433\u0433\u0435\u0440 \u043d\u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043e\u0442\u0441\u044b\u043b\u043a\u0430 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0432 \u0442\u0435\u043b\u0435\u0433\u0440\u0430\u043c\u043c. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043c\u044b \u043d\u0438\u0433\u0434\u0435 \u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u0430\u0435\u043c \u0438 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0435, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0440\u043e\u043b\u0431\u044d\u043a\u0430 \u0432 \u0431\u043e\u0442\u0435, \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u043b\u043e\u0433\u0435\u0440\u0430 \u043e\u0441\u0442\u0430\u043d\u0435\u0442\u0441\u044f \u0437\u0430\u043f\u0438\u0441\u044c. \u0413\u043b\u0430\u0432\u043d\u043e\u0435 \u043d\u0435 \u043e\u0442\u0441\u044b\u043b\u0430\u0442\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043e\u0431 \u043e\u0448\u0438\u0431\u043a\u0438 \u0441\u0430\u043c\u043e\u0433\u043e \u0442\u0435\u043b\u0435\u0433\u0440\u0430\u043c\u043c\u0430 \u0432 \u0442\u0435\u043b\u0435\u0433\u0440\u0430\u043c\u043c.<\/p>\n<pre><code class=\"pgsql\">CREATE TABLE crypto_bot2.log (     id BIGSERIAL PRIMARY KEY,     l_date timestamp with time zone,     l_type text,     msg text,     CONSTRAINT log_pkey PRIMARY KEY (id) ); CREATE TRIGGER tlg_send_log     AFTER INSERT     ON crypto_bot2.log     FOR EACH ROW     WHEN (new.l_type &lt;> 'TLG_ERROR'::text)     EXECUTE PROCEDURE crypto_bot2.tlg_send_log();  CREATE FUNCTION crypto_bot2.tlg_send_log()     RETURNS trigger     LANGUAGE 'plpgsql' AS $BODY$ DECLARE     st record; BEGIN     SELECT * INTO st FROM crypto_bot2.tlg_state;     IF ((st.tlg_error_on AND NEW.l_type = 'ERROR') OR (st.tlg_log_on AND NEW.l_type = 'LOG') OR              (st.tlg_warning_on AND NEW.l_type = 'WARNING')) THEN INSERT INTO crypto_bot2.tlg_messages(msg) VALUES(NEW.msg);     END IF;     RETURN NULL; END; $BODY$;<\/code><\/pre>\n<p>\u0412 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 tlg_send_log\u00a0 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0434\u043b\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0432 \u0442\u0435\u043b\u0435\u0433\u0440\u0430\u043c\u043c \u043f\u043e\u043c\u0435\u0449\u0430\u044e\u0442\u0441\u044f \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 tlg_messages, \u043f\u0440\u0438 \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u043c \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u0442\u0435\u043b\u0435\u0433\u0440\u0430\u043c\u043c \u0431\u043e\u0442\u0430 \u043e\u043d\u0438 \u0431\u0443\u0434\u0443\u0442 \u043e\u0442\u043e\u0441\u043b\u0430\u043d\u044b \u0432 \u0442\u0435\u043b\u0435\u0433\u0440\u0430\u043c\u043c.<\/p>\n<p>\u0410 \u0432\u043e\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f.<\/p>\n<pre><code class=\"pgsql\">CREATE OR REPLACE FUNCTION crypto_bot2.log_commit( msg text, VARIADIC param text[] DEFAULT NULL::text[])  RETURNS integer  LANGUAGE 'plpgsql'  AS $BODY$ BEGIN     PERFORM crypto_bot2.send_async_cmd('SELECT crypto_bot2.log(' ||      quote_literal(format(msg, VARIADIC param)) || ')');     RETURN 0; END; $BODY$;  CREATE OR REPLACE FUNCTION crypto_bot2.log(     msg text,     VARIADIC param text[] DEFAULT NULL::text[])     RETURNS integer     LANGUAGE 'plpgsql'     AS $BODY$     BEGIN      INSERT INTO crypto_bot2.log(l_date, l_type, msg) VALUES (clock_timestamp(), 'LOG', format(msg, VARIADIC param));      RETURN 0;     END; $BODY$;<\/code><\/pre>\n<p>\u0415\u0449\u0435 \u0440\u0430\u0437 \u0432\u043a\u0440\u0430\u0442\u0446\u0435 \u043a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435, \u043a\u043e\u0434 \u0443 \u0432\u0430\u0441 \u043f\u0435\u0440\u0435\u0434 \u0433\u043b\u0430\u0437\u0430\u043c\u0438.<\/p>\n<p>\u0412\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f log_commit, \u044d\u0442\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0447\u0435\u0440\u0435\u0437 pipe \u043f\u043e\u0441\u044b\u043b\u0430\u0435\u0442 \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u0432 \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u0435\u0441\u0441\u0438\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044e log, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u0441\u0442\u0430\u0432\u0438\u0442 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 log, \u043d\u043e \u044d\u0442\u043e \u0432 \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u0435\u0441\u0441\u0438\u0438 \u0438 \u0441\u0440\u0430\u0437\u0443 \u0437\u0430\u043a\u043e\u043c\u0438\u0442\u0438\u0442\u0441\u044f. \u0422\u0430\u043a \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u043e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0441\u0435\u0441\u0441\u0438\u044f \u0434\u0430\u0441\u0442 \u0441\u0431\u043e\u0439 log \u0443 \u043d\u0430\u0441 \u043e\u0441\u0442\u0430\u043d\u0435\u0442\u0441\u044f.\u00a0 \u041d\u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 log \u0443 \u043d\u0430\u0441 \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0442\u0440\u0438\u0433\u0435\u0440 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442 \u043d\u0430\u0434\u043e \u043b\u0438 \u043e\u0442\u0441\u044b\u043b\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u043e\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0432 \u0442\u0435\u043b\u0435\u0433\u0440\u0430\u043c\u043c \u0438 \u0435\u0441\u043b\u0438 \u043d\u0430\u0434\u043e \u0442\u043e \u043f\u043e\u043b\u043e\u0436\u0438\u0442 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 tlg_messages, \u0438 \u043a\u043e\u0433\u0434\u0430 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u0441\u044f, \u043c\u043e\u0439 \u0442\u0435\u043b\u0435\u0433\u0440\u0430\u043c\u043c \u0431\u043e\u0442 \u043e\u043d \u043e\u0442\u043e\u0448\u043b\u0435\u0442 \u044d\u0442\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043c\u043d\u0435. \u0421\u0432\u043e\u0438 \u0434\u0435\u0442\u0438 \u0438 \u0441\u0432\u043e\u0438 \u0438\u0434\u0435\u0438 \u0441\u0430\u043c\u043e\u0435 \u043b\u0443\u0447\u0448\u0435\u0435, \u043c\u043d\u0435 \u043a\u0430\u0436\u0435\u0442\u0441\u044f \u044d\u0442\u043e \u0445\u043e\u0440\u043e\u0448\u0435\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435. \u0412\u043e\u0442 \u043a\u0443\u0441\u043e\u043a \u043a\u043e\u0434\u0430 \u0438\u0437 \u0442\u0435\u043b\u0435\u0433\u0440\u0430\u043c \u0431\u043e\u0442\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0442\u0441\u044b\u043b\u0430\u0435\u0442 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f<\/p>\n<pre><code class=\"pgsql\">SELECT array_agg(id), string_agg(msg, chr(10)) INTO send_ids, send_text FROM crypto_bot2.tlg_messages; IF (send_text IS NOT NULL) THEN     FOR i IN 1.. (length(send_text)\/2048 + 1) LOOP         jt = crypto_bot2.tlg_send2_msg(substring(send_text, (i - 1) * 2048, 2048)); IF (jt->>'ok' != 'true') THEN     EXIT; END IF;     END LOOP;     IF (jt->>'ok' = 'true') THEN DELETE FROM crypto_bot2.tlg_messages WHERE id IN (SELECT * FROM unnest(send_ids));     END IF; END IF;<\/code><\/pre>\n<p>\u0415\u0441\u043b\u0438 \u043f\u0440\u043e\u0438\u0437\u043e\u0439\u0434\u0435\u0442 \u0441\u0431\u043e\u0439 \u0432 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0435, \u0442\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043d\u0435 \u0431\u0443\u0434\u0443\u0442 \u0443\u0434\u0430\u043b\u0435\u043d\u044b \u0438\u0437 \u0442\u0430\u0431\u043b\u0438\u0446\u044b tls_messages \u0438 \u0431\u0443\u0434\u0443\u0442 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u044b \u043f\u043e\u0437\u0436\u0435.<\/p>\n<h2>\u0414\u0440\u0430\u0439\u0432\u0435\u0440 \u0434\u043b\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0431\u0438\u0440\u0436\u0435 Binance.   <\/h2>\n<p>\u042f \u043d\u0430\u0447\u0438\u043d\u0430\u043b \u0442\u043e\u0440\u0433\u043e\u0432\u0430\u0442\u044c \u043d\u0430 wex, \u0437\u0430\u0442\u0435\u043c \u043d\u0430 kraken \u0438 \u0441\u0435\u0439\u0447\u0430\u0441 \u043f\u0435\u0440\u0435\u0431\u0440\u0430\u043b\u0441\u044f \u043d\u0430 binance. \u041f\u0438\u0441\u0430\u043b \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u044b \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u044d\u0442\u0438\u0445 \u0431\u0438\u0440\u0436, \u0430 \u0442\u0430\u043a \u0436\u0435 \u0434\u043b\u044f \u0442\u0438\u043d\u044c\u043a\u043e\u0444 \u043a\u043e\u0433\u0434\u0430 \u0445\u043e\u0442\u0435\u043b \u0442\u043e\u0440\u0433\u043e\u0432\u0430\u0442\u044c \u0430\u043a\u0446\u0438\u044f\u043c\u0438. \u0417\u0434\u0435\u0441\u044c \u043f\u0440\u0438\u043c\u0435\u0440 \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430 \u0434\u043b\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a binance. \u0422\u0430\u043a \u0436\u0435 \u043f\u0440\u0438 \u0447\u0442\u0435\u043d\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0441 binance, \u0431\u0438\u0440\u0436\u0430 \u043d\u0435 \u043b\u044e\u0431\u0438\u0442 \u043a\u043e\u0433\u0434\u0430 \u0435\u0435 \u0447\u0430\u0441\u0442\u043e \u043e\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u044e\u0442, \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u044f \u0447\u0442\u043e \u044f \u0442\u043e\u0440\u0433\u0443\u044e 350 \u043f\u0430\u0440, \u0442\u043e \u0435\u0441\u0442\u044c \u0434\u0435\u043b\u0430\u044e 350 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0432 \u043c\u0438\u043d\u0443\u0442\u0443, \u0442\u043e \u043d\u0430\u0434\u043e \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0441\u044c\u0431\u044b \u0431\u0438\u0440\u0436\u0438, \u043a\u043e\u0433\u0434\u0430 \u043f\u0440\u043e\u0441\u044f\u0442 \u0437\u0430\u043c\u0435\u0434\u043b\u0438\u0442\u044c \u043e\u043f\u0440\u043e\u0441\u044b. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0443\u044e \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0443\u044e \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0443 \u0434\u043b\u044f \u043e\u043f\u0440\u043e\u0441\u0430 \u0431\u0438\u0440\u0436\u0438. \u0413\u043e\u0442\u043e\u0432 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0438\u043c\u0435\u044e\u0449\u0438\u0435\u0441\u044f \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u044b \u0434\u043b\u044f \u043a\u0440\u0430\u043a\u0435\u043d\u0430, \u0442\u0438\u043d\u044c\u043a\u043e\u0432\u0430, \u0438\u043b\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0434\u043b\u044f \u0434\u0440\u0443\u0433\u0438\u0445 \u0431\u0438\u0440\u0436 \u0435\u0441\u043b\u0438 \u043a\u043e\u0433\u043e-\u0442\u043e \u0437\u0430\u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u0435\u0442. <\/p>\n<pre><code class=\"pgsql\">CREATE OR REPLACE FUNCTION crypto_bot2.binance_call_trade_server(     path text,     param text DEFAULT NULL::text,     http_method text DEFAULT 'GET'::text)     RETURNS jsonb     LANGUAGE 'plpgsql'     AS $BODY$     DECLARE         url text = 'https:\/\/api.binance.com\/api\/v3'; j text; key text = 'KEYXXXXXX'; sign text = 'signYYYYYYY';         p text; u text; signature text;  req http_request; key_header http_header; http_status integer; error text; BEGIN     key_header.field = 'X-MBX-APIKEY';      key_header.value = key;      p = CASE WHEN param IS NULL THEN 'timestamp=' ELSE param || '&amp;timestamp=' END ||            round((extract(epoch from clock_timestamp())*1000)::numeric,0);      signature = encode(hmac(p,sign,'sha256'),'hex');       p = p || '&amp;signature=' || signature;      req.method = http_method;      req.headers= array[key_header];      u = url || path;      IF (lower(http_method) = 'get') THEN          req.uri =  u || '?' || p;      ELSE IF (lower(http_method) = 'post') THEN          req.uri = u;          req.content_type = 'application\/x-www-form-urlencoded';     req.content = p; END IF; END IF; BEGIN     SELECT status, content INTO http_status, j FROM http(req);     IF (http_status NOT IN (200, 400)) THEN         PERFORM pg_sleep(1);         SELECT status, content INTO http_status, j FROM http(req);     END IF;     IF (http_status != 200) THEN         RAISE EXCEPTION  USING HINT = format('%s?%s', u, p::text),  ERRCODE = 'BW002', MESSAGE = j;     END IF;     EXCEPTION WHEN OTHERS THEN          PERFORM pg_sleep(1);          SELECT status, content INTO http_status, j FROM http(req);      END;      IF (http_status != 200) THEN           RAISE EXCEPTION  USING HINT = format('%s?%s', u, p::text),  ERRCODE = 'BW002', MESSAGE = j;     END IF;     RETURN j::jsonb;     END;    $BODY$;<\/code><\/pre>\n<p>\u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u043f\u044b\u0442\u0430\u044e\u0441\u044c \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441 \u0435\u0441\u043b\u0438 \u043d\u0435\u0442, \u0442\u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e \u043e\u0448\u0438\u0431\u043a\u0443 \u0438 \u0431\u043e\u0442 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u0442 \u0432\u0441\u0435 \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u044c \u0437\u0430\u043d\u043e\u0432\u043e \u0447\u0443\u0442\u044c \u043f\u043e\u0437\u0436\u0435.   <\/p>\n<pre><code class=\"pgsql\">CREATE OR REPLACE FUNCTION crypto_bot2.bhttps_get(     url text,     params hstore DEFAULT ''::hstore,      OUT status integer,       OUT content text) RETURNS record LANGUAGE 'plpgsql' AS $BODY$ DECLARE     r record;     error text; BEGIN     url = url || CASE WHEN array_length(akeys(params), 1) > 0 THEN '?' ELSE '' END;     FOR r IN SELECT key, value FROM  each(params) LOOP           url = url || '&amp;' || r.key || '=' || urlencode(r.value);     END LOOP; SELECT h.status, h.content INTO status, content FROM http_get(url) h;  -- \u0411\u0438\u043d\u0430\u043d\u0441 \u0438\u043d\u043e\u0433\u0434\u0430 \u043f\u0440\u043e\u0441\u0438\u0442 \u043f\u0440\u0438\u0442\u043e\u0440\u043c\u043e\u0437\u0438\u0442\u044c \u0441 \u0437\u0430\u043f\u0440\u043e\u0441\u0430\u043c\u0438  IF (status  = 429) THEN      PERFORM pg_sleep(10);  END IF;   IF (status = 418) THEN       PERFORM pg_sleep(30);   END IF;   IF (status = 403) THEN        PERFORM pg_sleep(120);   END IF;    IF (status != 200) THEN        RAISE EXCEPTION  USING HINT = url,  ERRCODE = 'BW002', MESSAGE = 'Http status =' || status;     END IF;     EXCEPTION WHEN OTHERS THEN      GET STACKED DIAGNOSTICS error = MESSAGE_TEXT;           RAISE EXCEPTION  USING HINT = url, ERRCODE = 'BW002', MESSAGE = error;    END;    $BODY$; <\/code><\/pre>\n<h3>\u0411\u043e\u0442 \u0434\u043b\u044f \u0442\u043e\u0440\u0433\u043e\u0432\u043b\u0438<\/h3>\n<p>\u041a\u043e\u0434 \u0431\u043e\u0442\u0430 \u0434\u043b\u044f \u0442\u043e\u0440\u0433\u043e\u0432\u043b\u0438 \u044f \u043d\u0435 \u043f\u0440\u0438\u0432\u043e\u0436\u0443. \u041e\u0442\u043c\u0435\u0447\u0443 \u0442\u043e\u043b\u044c\u043a\u043e \u0433\u043b\u0430\u0432\u043d\u044b\u0435 \u0432\u0435\u0449\u0438, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u0435\u0441\u043b\u0438 \u0432\u044b \u0431\u0443\u0434\u0435\u0442\u0435 \u0435\u0433\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c. \u0420\u0435\u0448\u0435\u043d\u0438\u0435 \u043e \u043f\u043e\u043a\u0443\u043f\u043a\u0435 \u043c\u043e\u0439 \u0431\u043e\u0442 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0440\u0430\u0437 \u0432 \u043c\u0438\u043d\u0443\u0442\u0443, \u043e\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u044f \u0431\u0438\u0440\u0436\u0443, \u0437\u0430\u0442\u0435\u043c \u0435\u0441\u043b\u0438 \u0431\u043e\u0442 \u043a\u0443\u043f\u0438\u043b \u043a\u0440\u0438\u043f\u0442\u0443 \u044f \u043e\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u044e \u0431\u0438\u0440\u0436\u0443 \u043a\u0430\u0436\u0434\u044b\u0435 5 \u0441\u0435\u043a\u0443\u043d\u0434 \u0434\u043b\u044f \u043f\u0440\u0438\u043d\u044f\u0442\u0438\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u043e \u043f\u0440\u043e\u0434\u0430\u0436\u0435, \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0443 \u043c\u0435\u043d\u044f \u0431\u044b\u0432\u0430\u0435\u0442 \u043a\u0443\u043f\u043b\u0435\u043d\u043e \u043e\u0442 0 \u0434\u043e 8 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u043a\u0440\u0438\u043f\u0442\u043e \u0432\u0430\u043b\u044e\u0442. \u041e\u043f\u0440\u043e\u0441 \u043a\u0430\u0436\u0434\u044b\u0435 5 \u0441\u0435\u043a\u0443\u043d\u0434 \u044d\u0442\u043e \u044d\u043c\u0443\u043b\u044f\u0446\u0438\u044f \u0441\u0442\u043e\u043f \u043e\u0440\u0434\u0435\u0440\u0430, \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0435\u0441\u043b\u0438 \u0431\u0438\u0440\u0436\u0430 \u0443\u043f\u0430\u0434\u0435\u0442 \u0438 \u0443 \u043c\u0435\u043d\u044f \u043d\u0430 \u0440\u0443\u043a\u0430\u0445 \u0431\u0443\u0434\u0435\u0442 \u043a\u0440\u0438\u043f\u0442\u043e\u0432\u0430\u043b\u044e\u0442\u0430, \u0442\u043e \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0434\u0430\u0442\u044c \u0435\u0435 \u0441 \u0443\u0431\u044b\u0442\u043a\u043e\u043c, \u043d\u043e \u043f\u043e\u043a\u0430 \u0442\u0430\u043a\u043e\u0433\u043e \u043d\u0435 \u0431\u044b\u043b\u043e, \u0438 \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u044f \u043f\u0440\u0435\u0434\u0443\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u0442 \u043f\u0440\u043e\u0434\u0430\u0436\u0443 \u0434\u043e \u043c\u043e\u043c\u0435\u043d\u0442\u0430 \u043e\u0431\u0432\u0430\u043b\u0430. \u0425\u043e\u0442\u044f \u0442\u0430\u043a\u043e\u0439 \u0440\u0438\u0441\u043a \u0435\u0441\u0442\u044c, \u0438 \u044f \u0435\u0433\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u044e. \u0421\u0442\u043e\u043f \u043e\u0440\u0434\u0435\u0440\u0430 \u043d\u0435 \u0441\u0442\u0430\u0432\u043b\u044e, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u044f \u043d\u0435 \u043f\u0440\u0435\u0434\u0443\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u0442 \u043f\u0440\u043e\u0434\u0430\u0436\u0438 \u043f\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0439 \u0446\u0435\u043d\u0435, \u0430 \u043f\u0440\u043e\u0434\u0430\u0436\u0430 \u0438 \u043f\u043e\u043a\u0443\u043f\u043a\u0430 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u0440\u0438 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0438 \u0440\u044f\u0434\u0430 \u0444\u0430\u043a\u0442\u043e\u0440\u043e\u0432. \u041e\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0442\u044c \u0431\u0438\u0440\u0436\u0443 \u0447\u0430\u0449\u0435 \u0440\u0430\u0437\u0430 \u0432 \u043c\u0438\u043d\u0443\u0442\u0443 \u0435\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u043d\u0430 \u0440\u0443\u043a\u0430\u0445 \u043d\u0435\u0442 \u043a\u0443\u043f\u043b\u0435\u043d\u043d\u043e\u0439 \u043a\u0440\u0438\u043f\u0442\u043e\u0432\u0430\u043b\u044e\u0442\u044b \u043d\u0435 \u0441\u0442\u043e\u0438\u0442, \u0431\u0438\u0440\u0436\u0430 \u0432\u0430\u0441 \u0431\u044b\u0441\u0442\u0440\u043e \u0437\u0430\u0431\u0430\u043d\u0438\u0442 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0435\u0441\u043b\u0438 \u0432\u044b \u0442\u043e\u0440\u0433\u0443\u0435\u0442\u0435 \u0431\u043e\u043b\u044c\u0448\u0438\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u043a\u043e\u0438\u043d\u043e\u0432, \u0430 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0447\u0430\u0441\u0442\u044b\u0445 \u043e\u043f\u0440\u043e\u0441\u043e\u0432 \u0442\u043e\u0447\u043d\u043e \u043d\u0435 \u0441\u0442\u043e\u0438\u0442. \u041d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0441\u0442\u043e\u0438\u0442 \u0432\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0442\u044c \u0432\u0441\u0435 \u0434\u0435\u043d\u044c\u0433\u0438 \u0432 \u043e\u0434\u0438\u043d \u043a\u043e\u0438\u043d, \u0438 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0431\u043e\u0442 \u0434\u043e\u043b\u0436\u0435\u043d \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0443\u0431\u044b\u0442\u043a\u0438 \u0438 \u043d\u0435 \u043d\u0430\u0434\u0435\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0432\u0441\u0435 \u0431\u0443\u0434\u0435\u0442 \u0445\u043e\u0440\u043e\u0448\u043e. \u0427\u0438\u0441\u043b\u043e \u0441\u0434\u0435\u043b\u043e\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043d\u0435 \u043d\u0435 \u043f\u0440\u0438\u043d\u043e\u0441\u044f\u0442 \u0443\u0431\u044b\u0442\u043e\u043a \u0432 \u0441\u0440\u0435\u0434\u043d\u0435\u043c 72%, \u043d\u043e \u044d\u0442\u043e \u043d\u0435 \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u0432\u0441\u0435, \u0447\u0442\u043e \u0431\u0435\u0437 \u0443\u0431\u044b\u0442\u043a\u0430 \u044d\u0442\u043e \u043f\u0440\u0438\u0431\u044b\u043b\u044c, \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0430 \u0441\u0434\u0435\u043b\u043e\u043a \u0438\u0437 \u044d\u0442\u0438\u0445 72% \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0431\u0435\u0437 \u043f\u0440\u0438\u0431\u044b\u043b\u0438. \u0421\u0430\u043c\u043e\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0435 \u0447\u0442\u043e \u043f\u0440\u0438 \u043f\u0440\u043e\u0433\u043e\u043d\u0435 \u043d\u0430 \u0430\u043a\u0446\u0438\u044f\u0445 \u044d\u0442\u043e\u0442 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0442\u0430\u043a \u0436\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u043b \u043f\u0440\u043e\u0446\u0435\u043d\u0442 \u0441\u0434\u0435\u043b\u043e\u043a \u0431\u0435\u0437 \u0443\u0431\u044b\u0442\u043a\u0430 \u0432 75%, \u0447\u0442\u043e \u0432 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u0445 \u043f\u043e\u0433\u0440\u0435\u0448\u043d\u043e\u0441\u0442\u0438. \u041c\u0435\u043d\u044f \u044d\u0442\u043e \u043e\u0431\u043d\u0430\u0434\u0435\u0436\u0438\u043b\u043e. \u0422\u0430\u043a \u0436\u0435 \u044f \u0441\u0434\u0435\u043b\u0430\u043b \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0431\u043e\u0442\u043e\u043c, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043c\u043d\u0435 \u043f\u0440\u043e\u0434\u0430\u0442\u044c \u043a\u0443\u043f\u043b\u0435\u043d\u043d\u044b\u0435 \u043a\u043e\u0438\u043d\u044b \u0432 \u043b\u044e\u0431\u043e\u0439 \u043c\u043e\u043c\u0435\u043d\u0442, \u0433\u043b\u0430\u0432\u043d\u043e\u0435 \u0443 \u043c\u0435\u043d\u044f \u043d\u0435\u0442 \u043a\u043d\u043e\u043f\u043e\u043a \u0438\u0445 \u043a\u0443\u043f\u0438\u0442\u044c, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0431\u043e\u0442 \u043f\u0440\u0438 \u043f\u043e\u043a\u0443\u043f\u043a\u0435 \u043a\u043e\u0438\u043d\u043e\u0432 \u0432\u0441\u0435\u0433\u0434\u0430 \u0437\u043d\u0430\u0435\u0442 \u0432 \u043a\u0430\u043a\u043e\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u043e\u043d \u0431\u0443\u0434\u0435\u0442 \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0443\u0431\u044b\u0442\u043e\u043a, \u043d\u0443 \u0430 \u043f\u0440\u0438\u0431\u044b\u043b\u044c \u043f\u0440\u0438 \u0436\u0435\u043b\u0430\u043d\u0438\u0438 \u044f \u043c\u043e\u0433\u0443 \u0438 \u0441\u0430\u043c \u0437\u0430\u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u044d\u0442\u043e \u0438\u043d\u043e\u0433\u0434\u0430 \u043f\u043e\u043b\u0435\u0437\u043d\u043e \u043d\u0430 \u043f\u0430\u0434\u0430\u044e\u0449\u0435\u043c \u0440\u044b\u043d\u043a\u0435. \u041d\u0430 \u0440\u0430\u0441\u0442\u0443\u0449\u0435\u043c \u0440\u044b\u043d\u043a\u0435 \u043b\u0443\u0447\u0448\u0435 \u0432\u0441\u0435 \u0434\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0442\u0435\u0445\u043d\u0438\u043a\u0435, \u0443 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043d\u0435\u0442 \u043d\u0438 \u0436\u0430\u0434\u043d\u043e\u0441\u0442\u0438, \u043d\u0438 \u043d\u0435\u0440\u0432\u043e\u0432, \u043d\u0438 \u043d\u0430\u0434\u0435\u0436\u0434\u044b.<\/p>\n<h3>\u0417\u0430\u043f\u0443\u0441\u043a \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b <\/h3>\n<p>\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u0438 \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u044b\u0439 \u0444\u0430\u0439\u043b. \u0412 centos 7 \u0431\u044b\u043b\u0430 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0443\u0442\u0435\u0447\u043a\u0438 \u043f\u0430\u043c\u044f\u0442\u0438 \u0432 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 curl \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 https \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f, \u0434\u0430\u043d\u043d\u0443\u044e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043f\u0430\u043a\u0435\u0442 pgsql-http. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u043b\u043e\u0441\u044c \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0431\u043e\u0442\u0430 \u0440\u0430\u0437 \u0432 \u0441\u0443\u0442\u043a\u0438. \u0421\u0435\u0439\u0447\u0430\u0441 \u0432 centos 8 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u043d\u0435\u0442 \u0438 \u0431\u043e\u0442 \u043c\u043e\u0436\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0431\u0435\u0437 \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438, \u043d\u043e \u044f \u043e\u0441\u0442\u0430\u0432\u0438\u043b \u0434\u0430\u043d\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0432 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 vacuum \u0432 \u043f\u043e\u0441\u0442\u0433\u0440\u0435\u0441\u0441\u0435 \u0438 \u0434\u0435\u043b\u0430\u0442\u044c \u0435\u0433\u043e \u0432 \u0440\u0443\u0447\u043d\u0443\u044e, \u0447\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u0432\u044b\u0441\u0438\u0442\u044c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c, \u043d\u043e \u044d\u0442\u043e \u043c\u044b\u0441\u043b\u0438 \u043e \u0431\u0443\u0434\u0443\u0449\u0435\u043c.\u00a0 \u0422\u0430\u043a \u0436\u0435 \u043f\u0440\u0438 \u0441\u0442\u0430\u0440\u0442\u0435 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442\u0441\u044f \u0431\u044b\u043b \u043b\u0438 \u0431\u043e\u0442 \u0437\u0430\u043f\u0443\u0449\u0435\u043d \u0438 \u0435\u0441\u043b\u0438 \u0431\u044b\u043b, \u0442\u043e \u043e\u043d \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u0441\u043d\u043e\u0432\u0430. \u0411\u044b\u043b\u043e \u0434\u0432\u0430 \u0440\u0430\u0437\u0430, \u043a\u043e\u0433\u0434\u0430 \u0441\u0435\u0440\u0432\u0435\u0440 \u0443 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430 \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043b\u0441\u044f \u0438 \u044d\u0442\u043e \u043c\u0435\u043d\u044f \u0432\u044b\u0440\u0443\u0447\u0430\u043b\u043e. \u0422\u0443\u0442 \u0432\u0441\u0435 \u043f\u0440\u043e\u0441\u0442\u043e. \u0417\u0430\u043f\u0443\u0441\u043a \u0438 \u043e\u0441\u0442\u0430\u043d\u043e\u0432 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u0430\u043c\u0438. <\/p>\n<p>\u0424\u0430\u0439\u043b cryptostart.sh<\/p>\n<pre><code class=\"bash\">#!\/bin\/bash if [ -f crypto_start ]; then     psql -c 'select crypto_bot2.start(true)' else     touch crypto_start     psql -c 'select crypto_bot2.start(false)' fi while [ -f crypto_start ]; do      psql -c 'select crypto_bot2.start(true)' done<\/code><\/pre>\n<p>\u0424\u0430\u0439\u043b cryptostop.sh<\/p>\n<pre><code class=\"bash\">#!\/bin\/bash rm -f crypto_start psql -c 'select crypto_bot2.stop()'<\/code><\/pre>\n<p>\u0424\u0430\u0439\u043b cryptorestart.sh<\/p>\n<pre><code class=\"bash\">#!\/bin\/bash if [ -f crypto_start ]; then while [ -f crypto_start ]; do      psql -c 'select crypto_bot2.start(true)' done fi<\/code><\/pre>\n<p>\u0417\u0430\u043f\u0443\u0441\u043a \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439<\/p>\n<pre><code class=\"bash\">nohup .\/cryptostart.sh &amp;<\/code><\/pre>\n<p>\u0424\u0430\u0439\u043b cryptorestart.sh \u043f\u043e\u043b\u043e\u0436\u0438\u043b \u0432 rc.local<\/p>\n<pre><code class=\"bash\">sudo -i -u postgres bash -c 'nohup \/var\/lib\/pgsql\/cryptorestart.sh &amp;' <\/code><\/pre>\n<h2>\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430    <\/h2>\n<pre><code class=\"pgsql\">CREATE OR REPLACE FUNCTION crypto_bot2.start(is_restart boolean DEFAULT false) RETURNS integer LANGUAGE 'plpgsql' AS $BODY$ DECLARE     st record;     wt  timestamptz;     start_time timestamptz;     wi int;     dblinks hstore;     bot_cmd text;     bot record;     dblnk text;     restart_interval interval = '2D'::interval;     req_time int = 5;     async_bot text = 'dblink_ASYNC_BOT';     BEGIN         SELECT * INTO st FROM crypto_bot2.bot_state; IF (st.status = 'RUN' AND NOT is_restart) THEN     RETURN -1;         END IF; -- \u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0447\u0442\u0435\u043d\u0438\u0435 \u0438\u0437 pipe  PERFORM crypto_bot2.create_dblink(async_bot); PERFORM dblink_send_query(async_bot, 'CALL crypto_bot2.async_cmd_bot()'); IF (is_restart) THEN     PERFORM crypto_bot2.warning_commit('\u041f\u0435\u0440\u0435\u0433\u0440\u0443\u0437\u0438\u043b\u0441\u044f'); ELSE     PERFORM crypto_bot2.send_async_cmd('DELETE FROM crypto_bot2.bot_state;      INSERT INTO   crypto_bot2.bot_state(status, start_time) VALUES(''RUN'', now());');     PERFORM crypto_bot2.tlg_send_msg(crypto_bot2.tlg_my_id(),'\u0425\u043e\u0437\u044f\u0438\u043d, \u043f\u043e\u0448\u0435\u043b \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c');     PERFORM crypto_bot2.log_commit('\u0421\u0442\u0430\u0440\u0442'); END IF; start_time = now(); bot_cmd = CASE WHEN is_restart THEN 'restart' ELSE 'start' END; LOOP     wt = clock_timestamp();     SELECT * INTO st FROM  crypto_bot2.bot_state t ;     IF (st.status = 'STOP') THEN bot_cmd = 'stop'; ELSE IF (clock_timestamp() - start_time > restart_interval) THEN     SELECT count(*) INTO wi FROM crypto_bot2.bots WHERE params->>'buy_price' IS NOT NULL;     IF (wi = 0 OR clock_timestamp() - start_time > restart_interval * 5) THEN         bot_cmd = 'pre_restart';     END IF;     END IF; END IF;     FOR bot IN (SELECT * FROM crypto_bot2.bots WHERE is_run) LOOP         dblnk = dblinks->bot.key; IF (dblnk IS NULL) THEN     dblnk = 'dblink_' || bot.key;     PERFORM crypto_bot2.create_dblink(dblnk);     PERFORM dblink_exec(dblnk, format('CALL crypto_bot2.init_bot(''%s'')', dblnk));     dblinks = CASE WHEN dblinks IS NULL THEN hstore(bot.key, dblnk)                       ELSE dblinks || hstore(bot.key, dblnk) END;         END IF;        IF (dblink_is_busy(dblnk) = 0) THEN           PERFORM crypto_bot2.clear_dblink(dblnk);   PERFORM dblink_send_query(dblnk, format('SELECT crypto_bot2.%s(''%s'', ''%s'')', bot.name, bot.key,           bot_cmd));        END IF;     END LOOP;     EXIT WHEN bot_cmd IN ('stop', 'pre_restart');      wi = req_time - EXTRACT(epoch FROM(clock_timestamp() - wt));      IF (wi > 0) THEN           PERFORM pg_sleep(wi);      END IF;      bot_cmd = 'work'; END LOOP; FOR bot IN (SELECT * FROM each(dblinks)) LOOP     PERFORM dblink_disconnect(bot.value); END LOOP; IF (bot_cmd = 'stop') THEN     PERFORM crypto_bot2.log_commit('\u0411\u043e\u0442 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d'); END IF; -- \u041e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u0447\u0442\u0435\u043d\u0438\u0435 \u0438\u0437 pipe PERFORM crypto_bot2.send_async_cmd('stop'); DELETE FROM crypto_bot2.log WHERE l_date &lt; clock_timestamp() - '7D'::interval AND l_type != 'LOG';     -- \u0423\u0434\u0430\u043b\u044f\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u0434\u043b\u044f \u0431\u0438\u043d\u0430\u043d\u0441\u0430 \u0438\u0445 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043c\u043d\u043e\u0433\u043e      DELETE FROM crypto_bot2.binance_trades WHERE  t_date &lt; clock_timestamp() - '1D'::interval;     DELETE FROM crypto_bot2.binance_data WHERE t_date &lt; clock_timestamp() - '60D'::interval;     PERFORM dblink_disconnect(async_bot);     IF (bot_cmd = 'stop') THEN         PERFORM crypto_bot2.tlg_send_msg(crypto_bot2.tlg_my_id(), '\u0425\u043e\u0437\u044f\u0438\u043d, \u044f \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u043b \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c');     END IF;     RETURN 0; END; $BODY$;  CREATE OR REPLACE FUNCTION crypto_bot2.stop() RETURNS integer LANGUAGE 'plpgsql' AS $BODY$ BEGIN     UPDATE crypto_bot2.bot_state SET status =  'STOP';     RETURN 0; END; $BODY$; <\/code><\/pre>\n<p>\u0422\u0430\u0431\u043b\u0438\u0446\u0430 bot_state<\/p>\n<pre><code class=\"pgsql\">CREATE TABLE crypto_bot2.bot_state (     status text ,      start_time timestamp with time zone ) <\/code><\/pre>\n<p>\u041a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0435\u0432 \u043a \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435 \u0443 \u043c\u0435\u043d\u044f \u043d\u0435\u0442, \u043e\u043d\u0430 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u0430 \u0446\u0435\u043b\u0438\u043a\u043e\u043c. \u041c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0439 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439, \u0431\u043e\u0442\u0443 \u0437\u0430\u043f\u0440\u0435\u0449\u0435\u043d\u043e \u043f\u0435\u0440\u0435\u0433\u0440\u0443\u0436\u0430\u0442\u044c\u0441\u044f \u0435\u0441\u043b\u0438 \u0443 \u043d\u0430\u0441 \u043a\u0443\u043f\u043b\u0435\u043d\u0430 \u043a\u0440\u0438\u043f\u0442\u0430. \u0415\u0441\u043b\u0438 \u0431\u0443\u0434\u0443\u0442 \u0432\u043e\u043f\u0440\u043e\u0441\u044b \u0433\u043e\u0442\u043e\u0432 \u043e\u0442\u0432\u0435\u0442\u0438\u0442\u044c.<\/p>\n<h3>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 Postgres<\/h3>\n<p>\u041f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u043e\u0432\u043e\u0437\u0438\u0442\u0441\u044f \u0441 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0431\u0430\u0437\u044b, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u043e\u043a\u043e\u043b\u043e 400 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432 \u043f\u043e\u0441\u0442\u0433\u0440\u0435\u0441\u0430 \u0438 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043e\u0442 5000 \u0434\u043e 50000 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u043a\u0443\u043f\u043b\u0438 \u043f\u0440\u043e\u0434\u0430\u0436\u0438 \u043d\u0430 \u0431\u0438\u0440\u0436\u0435, \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0440\u044b\u043d\u043a\u0430. \u0415\u0449\u0435 \u0432\u0441\u0435 \u044d\u0442\u043e \u043d\u0430\u0434\u043e \u043e\u0431\u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0438 \u043f\u0440\u0438\u043d\u044f\u0442\u044c \u0440\u0435\u0448\u0435\u043d\u0438\u0435. \u041c\u0435\u043d\u044f \u043f\u0440\u0438\u044f\u0442\u043d\u043e \u0443\u0434\u0438\u0432\u0438\u043b\u043e \u0447\u0442\u043e \u0441\u043e \u0432\u0441\u0435\u043c \u044d\u0442\u0438\u043c \u043f\u043e\u0441\u0442\u0433\u0440\u0435\u0441 \u043b\u0435\u0433\u043a\u043e \u0441\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0430 \u043d\u0435\u0434\u043e\u0440\u043e\u0433\u043e\u043c \u043e\u0431\u043b\u0430\u0447\u043d\u043e\u043c \u0445\u043e\u0441\u0442\u0438\u043d\u0433\u0435 \u0437\u0430 14 \u0435\u0432\u0440\u043e. \u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0430 4 \u044f\u0434\u0440\u0430, 8\u0413\u0431 \u043f\u0430\u043c\u044f\u0442\u0438 \u0438 160\u0413\u0431 \u0434\u0438\u0441\u043a. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e 13 \u0432\u0435\u0440\u0441\u0438\u044e \u043f\u043e\u0441\u0442\u0433\u0440\u0435\u0441. \u0417\u0434\u0435\u0441\u044c \u043f\u0440\u0438\u0432\u043e\u0436\u0443 \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u0435\u043d\u044f\u043b. <\/p>\n<p>max_connections = 1000<\/p>\n<p>shared_buffers = 1024MB\u00a0 <\/p>\n<p>max_files_per_process = 1500<\/p>\n<p>wal_buffers = 32MB<\/p>\n<p>commit_delay = 100000<\/p>\n<p>\u0412\u043e\u0442 \u043a\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043c\u043e\u0439 \u0434\u0430\u0448\u0431\u043e\u0430\u0440\u0434 \u0441 350 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430\u043c\u0438 \u043f\u043e\u0441\u0442\u0433\u0440\u0435\u0441\u0441.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/69a\/79c\/47f\/69a79c47fdcf1453bdc295227459e02b.png\" width=\"1920\" height=\"1040\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/69a\/79c\/47f\/69a79c47fdcf1453bdc295227459e02b.png\"\/><figcaption><\/figcaption><\/figure>\n<h3>\u042d\u043c\u0443\u043b\u044f\u0446\u0438\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0431\u043e\u0442\u044b<\/h3>\n<p>\u042f \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u044e \u0432\u0441\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0441\u043e\u0431\u0440\u0430\u043d\u043d\u044b\u0435 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0440\u0430\u0431\u043e\u0442\u0430 \u0431\u043e\u0442\u0430 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435, \u044d\u0442\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u0430\u0433\u0440\u0435\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u044b \u0432\u0441\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0442\u044c \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0441\u043d\u043e\u0432\u0430. \u0412\u0441\u0435\u0433\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u044d\u043c\u0443\u043b\u044f\u0442\u043e\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u043f\u043e \u044d\u0442\u0438\u043c \u0434\u0430\u043d\u043d\u044b\u043c \u0438 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0442\u0435\u043e\u0440\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0431\u043e\u0442\u0430. \u0412 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0435 \u0441\u043b\u0443\u0447\u0430\u0435\u0432 \u043e\u043d\u043e \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0435\u0442 \u0441 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u043c, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0434\u043b\u044f \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0445 \u0441\u0443\u043c\u043c.\u00a0 \u041f\u0440\u0438 \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0441\u0443\u043c\u043c\u0430\u0445 \u0431\u043e\u0442 \u0432\u0441\u0435\u0433\u0434\u0430 \u0441\u043c\u043e\u0442\u0440\u0438\u0442 \u043a\u043e\u0440\u0437\u0438\u043d\u0443 \u0438 \u043f\u043e\u043a\u0443\u043f\u0430\u0435\u0442 \u0442\u0430\u043a \u0447\u0442\u043e \u0431\u044b \u043d\u0435 \u043f\u0440\u043e\u0434\u0430\u0432\u0438\u0442\u044c \u043a\u043e\u0440\u0437\u0438\u043d\u0443 \u0431\u043e\u043b\u044c\u0448\u0435 \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u0439 \u0432\u0435\u043b\u0438\u0447\u0438\u043d\u044b, \u0443 \u043c\u0435\u043d\u044f \u044d\u0442\u043e 0.015%. \u042d\u0442\u043e \u0432\u0430\u0436\u043d\u043e \u0434\u043b\u044f \u0430\u043b\u044c\u0442\u043e\u0432 \u0441 \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u043e\u0439 \u043a\u0430\u043f\u0438\u0442\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0435\u0439. \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0440\u0430\u0441\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u0435 \u0441 \u044d\u043c\u0443\u043b\u044f\u0442\u043e\u0440\u043e\u043c \u0442\u0430\u043a \u043a\u0430\u043a \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043a\u043e\u0440\u0437\u0438\u043d\u044b \u0432 \u043a\u0430\u0436\u0434\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043d\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c. \u0422\u0430\u043a \u0436\u0435 \u0441\u0435\u0439\u0447\u0430\u0441 \u044f \u0441\u0442\u0430\u043b \u043f\u0435\u0440\u0435\u0434 \u043f\u043e\u043a\u0443\u043f\u043a\u043e\u0439 \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043a\u043e\u0440\u0437\u0438\u043d\u0443 \u0438 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u0442\u0430\u043a \u0436\u0435 \u043e\u0442 \u0435\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f, \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u043b\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0443\u0434\u0430\u0447\u043d\u044b\u0439 \u0441\u0434\u0435\u043b\u043e\u043a \u043d\u0430 5%-10%, \u044d\u0442\u043e \u0442\u0430\u043a \u0436\u0435 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043e \u044d\u043c\u0443\u043b\u044f\u0442\u043e\u0440\u043e\u043c. <\/p>\n<p>\u042d\u043c\u0443\u043b\u044f\u0442\u043e\u0440 \u2014 \u044d\u0442\u043e, \u043d\u0430\u0432\u0435\u0440\u043d\u043e\u0435, \u0441\u0430\u043c\u0430\u044f \u0432\u0430\u0436\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0431\u043e\u0442\u0430, \u044f \u043d\u0430\u0447\u0438\u043d\u0430\u043b \u0440\u0430\u0431\u043e\u0442\u0443 \u0438\u043c\u0435\u043d\u043d\u043e \u0441 \u043d\u0435\u0433\u043e. \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u044f \u0441\u043a\u0430\u0447\u0430\u043b \u0432\u0441\u0435 \u0438\u0441\u0442\u043e\u0440\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0441 \u0431\u0438\u0440\u0436\u0438 kraken \u0438 \u0438\u0437\u043e\u0431\u0440\u0435\u0442\u0430\u043b \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b \u0442\u043e\u0440\u0433\u043e\u0432\u043b\u0438. \u0422\u043e, \u0447\u0442\u043e \u0431\u043e\u0442 \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u0446\u0435\u043b\u0438\u043a\u043e\u043c \u043d\u0430 pqsql \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0441\u043e\u0441\u0440\u0435\u0434\u043e\u0442\u043e\u0447\u0438\u0442\u0441\u044f \u0438\u043c\u0435\u043d\u043d\u043e \u043d\u0430 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430\u0445, \u0430 \u043d\u0435 \u043d\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438, \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u044f, \u0447\u0442\u043e \u0432\u0441\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u044b \u0432 postgresql \u0438 \u0442\u0430\u043a \u0436\u0435 \u0437\u0430\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 json, \u043d\u0443 \u0438 sql \u043e\u0442\u043b\u0438\u0447\u043d\u0430\u044f \u0432\u0435\u0449\u044c.\u00a0 \u041a\u043e\u0433\u0434\u0430 \u0443 \u043c\u0435\u043d\u044f \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438\u0441\u044c \u0440\u0430\u0431\u043e\u0447\u0438\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b \u044f \u043f\u0435\u0440\u0435\u0448\u0435\u043b \u043a \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0439 \u0442\u043e\u0440\u0433\u043e\u0432\u043b\u0435. \u0415\u0449\u0435 \u0440\u0430\u0437 \u0443\u0431\u0435\u0436\u0434\u0430\u044e\u0441\u044c, \u0447\u0442\u043e \u0432\u044b\u0431\u043e\u0440 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0433\u043e \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430 \u2014 \u044d\u0442\u043e \u043e\u0447\u0435\u043d\u044c \u0432\u0430\u0436\u043d\u043e. <\/p>\n<h3>\u041e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u0435 \u043e\u0442\u043a\u0430\u0437\u043e\u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u043e\u0441\u0442\u0438<\/h3>\n<p>\u042f \u0430\u0440\u0435\u043d\u0434\u0443\u044e \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u0443\u044e \u043c\u0430\u0448\u0438\u043d\u0443 \u0443 hetzner.de, \u0438 \u043c\u0435\u043d\u044f \u0432\u0441\u0435 \u0443\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442, \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435 \u044f \u0441\u043e\u0432\u0435\u0442\u0443\u044e \u0434\u043b\u044f \u0442\u043e\u0440\u0433\u043e\u0432\u043b\u0438 \u043d\u0430 binance \u0440\u0430\u0437\u043c\u0435\u0449\u0430\u0442\u044c \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440 \u0432 \u0434\u0430\u0442\u0430 \u0446\u0435\u043d\u0442\u0440\u0435 \u0432 \u0413\u0435\u0440\u043c\u0430\u043d\u0438\u0438, \u0430 \u043d\u0435 \u0432 \u0424\u0438\u043d\u043b\u044f\u043d\u0434\u0438\u0438. \u041f\u043e\u0447\u0435\u043c\u0443-\u0442\u043e \u0441\u0435\u0442\u0435\u0432\u044b\u0445 \u043e\u0448\u0438\u0431\u043e\u043a \u043f\u0440\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u0435 \u043a binance \u0438\u0437 \u0424\u0438\u043d\u043b\u044f\u043d\u0434\u0438\u0438 \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u0447\u0435\u043c \u0438\u0437 \u0413\u0435\u0440\u043c\u0430\u043d\u0438\u0438. \u041e\u0434\u043d\u0430\u0436\u0434\u044b \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u0430 \u043c\u044b\u0441\u043b\u044c, \u0435\u0441\u043b\u0438 \u0434\u0435\u043d\u0435\u0433 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0434 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u0431\u0443\u0434\u0435\u0442 \u043c\u043d\u043e\u0433\u043e \u043a\u0430\u043a \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u043e\u0441\u0442\u044c \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u0431\u0440\u044b\u0432\u0430 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u0441 \u0431\u0438\u0440\u0436\u0435\u0439. \u0421\u0440\u0430\u0437\u0443 \u0441\u043a\u0430\u0436\u0443 \u044f \u0435\u0449\u0435 \u043d\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043b \u0434\u0430\u043d\u043d\u0443\u044e \u0441\u0445\u0435\u043c\u0443, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043d\u0430 \u044f\u0445\u0442\u0443 \u043f\u043e\u043a\u0430 \u043d\u0435 \u0437\u0430\u0440\u0430\u0431\u043e\u0442\u0430\u043b. \u041e\u0434\u043d\u0430\u043a\u043e \u043f\u0440\u043e\u0434\u0443\u043c\u0430\u043b \u043a\u0430\u043a \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c. \u041e\u0431\u044a\u044f\u0441\u043d\u044e \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0445\u0435\u043c\u0443. \u0415\u0441\u0442\u044c \u0434\u0432\u0430 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0430 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u0434\u0430\u0442\u0430 \u0446\u0435\u043d\u0442\u0440\u0430\u0445, \u0436\u0435\u043b\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0430 \u0440\u0430\u0437\u043d\u044b\u0445 \u043a\u043e\u043d\u0442\u0438\u043d\u0435\u043d\u0442\u0430\u0445. \u041d\u0430 \u043d\u0438\u0445 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0430\u0448\u0430 \u0442\u043e\u0440\u0433\u043e\u0432\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430, \u043e\u0434\u043d\u0430 \u0432 \u0440\u0430\u0431\u043e\u0447\u0435\u043c \u0440\u0435\u0436\u0438\u043c\u0435, \u0434\u0440\u0443\u0433\u0430\u044f \u0432 \u0440\u0435\u0437\u0435\u0440\u0432\u0435. \u041a\u043e\u0433\u0434\u0430 \u0440\u0430\u0431\u043e\u0447\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043f\u0430\u0434\u0430\u0435\u0442, \u0440\u0435\u0437\u0435\u0440\u0432\u043d\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0442 \u0432 \u0440\u0430\u0431\u043e\u0447\u0438\u0439 \u0440\u0435\u0436\u0438\u043c. \u0412 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u0438\u043a\u0435 \u0435\u0441\u0442\u044c \u0442\u0430\u043a\u043e\u0439 \u0437\u0430\u0431\u0430\u0432\u043d\u044b\u0439 \u043f\u0440\u0438\u0435\u043c watchdog &#8212; \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u0441\u0445\u0435\u043c\u0430 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044f \u043d\u0430\u0434\u00a0<a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%97%D0%B0%D0%B2%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D0%B5\" rel=\"noopener noreferrer nofollow\">\u0437\u0430\u0432\u0438\u0441\u0430\u043d\u0438\u0435\u043c<\/a>\u00a0\u0441\u0438\u0441\u0442\u0435\u043c\u044b. \u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439\u00a0<a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%A2%D0%B0%D0%B9%D0%BC%D0%B5%D1%80\" rel=\"noopener noreferrer nofollow\">\u0442\u0430\u0439\u043c\u0435\u0440<\/a>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u0438 \u0441\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u0443\u0435\u043c\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439. \u0415\u0441\u043b\u0438 \u0441\u0431\u0440\u043e\u0441\u0430 \u043d\u0435 \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u043e \u0432 \u0442\u0435\u0447\u0435\u043d\u0438\u0435 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u0430 \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u0440\u0438\u043d\u0443\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f\u00a0<a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%9F%D0%B5%D1%80%D0%B5%D0%B7%D0%B0%D0%B3%D1%80%D1%83%D0%B7%D0%BA%D0%B0\" rel=\"noopener noreferrer nofollow\">\u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430<\/a>\u00a0\u0441\u0438\u0441\u0442\u0435\u043c\u044b. \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0442\u0430\u0439\u043c\u0435\u0440\u0430 \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u0440\u0434\u0435\u0440, \u043d\u0430 \u0431\u0438\u0440\u0436\u0435 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0437\u0430\u0432\u0435\u0434\u043e\u043c\u043e \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u0441\u044f. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043a\u0443\u043f\u0438\u0442\u044c \u0431\u0438\u0442\u043e\u043a \u0437\u0430 \u0440\u0443\u0431\u043b\u044c. \u041c\u044b \u0431\u0443\u0434\u0435\u043c \u0441\u0442\u0430\u0432\u0438\u0442\u044c \u044d\u0442\u043e\u0442 \u043e\u0440\u0434\u0435\u0440 \u0440\u0430\u0437 \u0432 5 \u043c\u0438\u043d\u0443\u0442 \u0438 \u0443\u0431\u0438\u0440\u0430\u0442\u044c \u0438 \u0435\u0441\u043b\u0438 \u043d\u0430\u0448\u0430 \u043e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0437\u0430\u0432\u0438\u0441\u043d\u0435\u0442 \u0438, \u043d\u0435 \u0443\u0431\u0435\u0440\u0435\u0442 \u043e\u0440\u0434\u0435\u0440 \u0432 \u0442\u0435\u0447\u0435\u043d\u0438\u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u0442\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043e \u0440\u0435\u0437\u0435\u0440\u0432\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435, \u0438 \u043e\u043d\u0430 \u0441\u0442\u0430\u043d\u0435\u0442 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439. \u0421\u0443\u0442\u044c \u0438\u0434\u0435\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u0440\u0434\u0435\u0440 \u0431\u0438\u0440\u0436\u0438 \u0434\u043b\u044f \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u044f \u043e\u0442\u043a\u0430\u0437\u043e\u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u043e\u0441\u0442\u0438. <\/p>\n<h3>\u0412\u044b\u0432\u043e\u0434\u044b<\/h3>\n<p>\u0412\u0441\u0435\u0433\u0434\u0430 \u0435\u0441\u0442\u044c \u0440\u0438\u0441\u043a \u043f\u043e\u0442\u0435\u0440\u044f\u0442\u044c \u0434\u0435\u043d\u044c\u0433\u0438, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0431\u0438\u0440\u0436\u0430 \u0437\u0430\u043a\u0440\u043e\u0435\u0442\u0441\u044f \u0438\u043b\u0438 \u043a\u0440\u0438\u043f\u0442\u043e\u0432\u0430\u043b\u044e\u0442\u0443 \u0437\u0430\u043f\u0440\u0435\u0442\u044f\u0442.\u00a0 \u0414\u043b\u044f \u0438\u0433\u0440\u044b \u043d\u0430 \u043f\u043e\u043d\u0438\u0436\u0435\u043d\u0438\u044f \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e \u043c\u043e\u043d\u0435\u0442\u044b DOWN \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0435\u0441\u0442\u044c \u043d\u0430 binance. \u041f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u0435\u0435 \u043e\u0444\u043e\u0440\u043c\u043b\u044f\u0442\u044c \u0448\u043e\u0440\u0442 \u043e\u0440\u0434\u0435\u0440\u0430, \u0442\u043e\u0433\u0434\u0430 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u043c\u043e\u043d\u0435\u0442 \u043d\u0430\u043c\u043d\u043e\u0433\u043e \u0431\u043e\u043b\u044c\u0448\u0435, \u043d\u043e \u043f\u043e\u043a\u0430 \u044f \u0434\u043e \u044d\u0442\u043e\u0433\u043e \u043d\u0435 \u0434\u043e\u0448\u0435\u043b.\u00a0 \u042f \u0441\u043e\u0431\u0438\u0440\u0430\u043b\u0441\u044f \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u043d\u0430 \u0442\u043e\u0440\u0433\u043e\u0432\u043b\u044e \u0430\u043a\u0446\u0438\u044f\u043c\u0438, \u043f\u0440\u043e\u0433\u043e\u043d\u044f\u043b \u0442\u0435\u0441\u0442\u044b \u043d\u0430 \u0438\u0441\u0442\u043e\u0440\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u043e \u0430\u043a\u0446\u0438\u044f\u043c \u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0442\u0430\u043a \u0436\u0435 \u0431\u044b\u043b \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c, \u043e\u0442 25% \u0434\u043e 50% \u043f\u0440\u043e\u0446\u0435\u043d\u0442\u043e\u0432 \u0432 \u0433\u043e\u0434, \u043d\u043e \u0445\u043e\u0440\u043e\u0448\u0435\u0433\u043e \u0430\u043f\u0438 \u0434\u043b\u044f \u0442\u043e\u0440\u0433\u043e\u0432\u043b\u0438 \u043d\u0435 \u0431\u044b\u043b\u043e, \u0430 \u0441\u0435\u0439\u0447\u0430\u0441 \u0438 \u043f\u043e\u0434\u0430\u0432\u043d\u043e \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u0442\u043e\u0440\u0433\u043e\u0432\u0430\u0442\u044c \u0432 \u0420\u043e\u0441\u0441\u0438\u0438 \u043d\u0435\u0442. \u0413\u043b\u0430\u0432\u043d\u043e\u0435 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u0442\u043e\u0440\u0433\u043e\u0432\u043b\u0438 \u0430\u043a\u0446\u0438\u044f\u043c\u0438 \u043e\u0442 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u0442\u043e\u0440\u0433\u043e\u0432\u043b\u0438 \u043a\u0440\u0438\u043f\u0442\u043e\u0439 \u044d\u0442\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0432\u044b \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435, \u043e\u043d \u0431\u043e\u043b\u044c\u0448\u0435 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0442\u043e\u0440\u0433\u043e\u0432\u043b\u0438 \u0430\u043a\u0446\u0438\u044f\u043c\u0438 \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043e\u043d\u0438 \u043c\u0435\u043d\u0435\u0435 \u0432\u043e\u043b\u043e\u0442\u0438\u043b\u044c\u043d\u044b, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0442\u043e\u0440\u0433\u043e\u0432\u043b\u044f \u043a\u0440\u0438\u043f\u0442\u043e\u0439 \u0438\u0434\u0435\u0442 \u043a\u0440\u0443\u0433\u043b\u043e\u0441\u0443\u0442\u043e\u0447\u043d\u043e, \u0430 \u043f\u0440\u0438 \u0442\u043e\u0440\u0433\u043e\u0432\u043b\u0438 \u0430\u043a\u0446\u0438\u044f\u043c\u0438 \u043d\u0430\u0434\u043e \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u0430\u043c\u0435\u0440\u0438\u043a\u0430\u043d\u0441\u043a\u0438\u0435 \u0442\u043e\u0440\u0433\u0438.\u00a0 \u0421\u0430\u043c\u0430 \u0438\u0434\u0435\u044f \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u0447\u0442\u043e \u0434\u043b\u044f \u043a\u0440\u0438\u043f\u0442\u044b \u0447\u0442\u043e \u0434\u043b\u044f \u0430\u043a\u0446\u0438\u0439 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u0430. \u0413\u043b\u0430\u0432\u043d\u043e\u0435, \u0447\u0442\u043e\u0431\u044b \u0431\u043e\u0442 \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043b \u0443\u0431\u044b\u0442\u043a\u0438 \u0438 \u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u0430\u043b \u0432 \u043d\u0430\u0434\u0435\u0436\u0434\u0435 \u0447\u0442\u043e \u0432\u0441\u0435 \u0431\u0443\u0434\u0435\u0442 \u0445\u043e\u0440\u043e\u0448\u043e. \u0415\u0449\u0435 \u0434\u0430\u043c \u0441\u043e\u0432\u0435\u0442, \u0432 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u043c\u0435\u043d\u044c\u0448\u0435 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u043e\u0432, \u0430 \u0435\u0441\u043b\u0438 \u043e\u043d\u0438 \u0435\u0441\u0442\u044c \u0442\u043e \u0442\u0438\u043f\u0430 \u0442\u0430\u043a\u0438\u0445 0.5, 0.25, 1.\/3. \u041d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u043f\u043e\u0434\u0433\u043e\u043d\u044f\u0439\u0442\u0435 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u044b \u043a \u0438\u0441\u0442\u043e\u0440\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u0434\u0430\u043d\u043d\u044b\u043c. \u041b\u0443\u0447\u0448\u0430\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u0435\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u043d\u043e\u0432\u0430\u044f \u0438\u0434\u0435\u044f \u0438 \u0432\u044b \u0435\u0435 \u043f\u0440\u043e\u0433\u043d\u0430\u043b\u0438 \u043d\u0430 \u0438\u0441\u0442\u043e\u0440\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0436\u0435\u043b\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0437\u0430 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0441\u0440\u043e\u043a \u0438 \u043d\u0430 \u0440\u0430\u0437\u043d\u044b\u0445 \u043f\u0430\u0440\u0430\u0445 \u043a\u0440\u0438\u043f\u0442\u043e\u0432\u0430\u043b\u044e\u0442 \u0438\u043b\u0438 \u0430\u043a\u0446\u0438\u0439 \u0438 \u0443 \u0432\u0430\u0441 \u0441\u0440\u0430\u0437\u0443 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0441\u044f \u043d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 \u043f\u043b\u044e\u0441. \u0423 \u043c\u0435\u043d\u044f \u0432 \u0442\u0435\u043b\u0435\u0433\u0440\u0430\u043c\u043c\u0435 \u0435\u0441\u0442\u044c \u043a\u0430\u043d\u0430\u043b \u043a\u0443\u0434\u0430 \u0431\u043e\u0442 \u043f\u0438\u0448\u0435\u0442 \u0441\u0432\u043e\u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f, \u043c\u043e\u0436\u0435\u0442\u0435 \u0437\u0430\u0433\u043b\u044f\u043d\u0443\u0442\u044c \u0432 \u043d\u0435\u0433\u043e, \u043d\u0435 \u043f\u0440\u0438\u0437\u044b\u0432\u0430\u044e \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u044f, \u043d\u043e \u0435\u0441\u043b\u0438 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u043e\u0433\u043b\u044f\u0434\u0435\u0442\u044c <a href=\"https:\/\/t.me\/criptozhenya\" rel=\"noopener noreferrer nofollow\">https:\/\/t.me\/criptozhenya<\/a>.\u00a0 \u0418 \u0435\u0449\u0435 \u0441\u043e\u0432\u0435\u0442 \u043d\u0435 \u0442\u043e\u0440\u0433\u0443\u0439\u0442\u0435 \u0440\u0443\u043a\u0430\u043c\u0438, \u044f \u043d\u0430 \u044d\u0442\u043e\u043c \u043f\u043e\u0433\u043e\u0440\u0435\u043b, \u043d\u0430 LUNE, \u0445\u043e\u0442\u0435\u043b \u043c\u043d\u043e\u0433\u043e \u0438 \u0441\u0440\u0430\u0437\u0443. \u041a\u043e\u0434 \u0432 git \u044f \u043d\u0435 \u0432\u044b\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u043b, \u043d\u043e, \u0435\u0441\u043b\u0438 \u043a\u043e\u0433\u043e \u0437\u0430\u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u0435\u0442 \u043c\u043e\u0433\u0443 \u0432\u044b\u0447\u0438\u0441\u0442\u0438\u0442\u044c \u0442\u043e\u0440\u0433\u043e\u0432\u044b\u0445 \u0431\u043e\u0442\u043e\u0432 \u0438 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u044d\u043a\u0441\u043f\u043e\u0440\u0442 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f.<\/p>\n<p>\u0413\u043b\u0430\u0432\u043d\u044b\u0439 \u0432\u044b\u0432\u043e\u0434: \u043c\u043e\u0436\u043d\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u0442\u043e\u0440\u0433\u043e\u0432\u044b\u0445 \u0431\u043e\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0442\u043e\u0440\u0433\u0443\u044e\u0442 \u0432 \u043f\u043b\u044e\u0441, \u0438\u0445 \u0434\u0435\u043b\u0430\u0442\u044c \u043b\u0443\u0447\u0448\u0435 \u0441\u0430\u043c\u043e\u043c\u0443 \u0438 \u043d\u0435 \u0432\u0435\u0440\u0438\u0442\u044c \u0442\u0435\u043c, \u043a\u0442\u043e \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442 \u043f\u043b\u0430\u0442\u043d\u044b\u0435 \u0441\u0438\u0433\u043d\u0430\u043b\u044b. \u041c\u043e\u0439 \u0442\u0435\u043b\u0435\u0433\u0440\u0430\u043c\u043c \u0434\u043b\u044f \u0441\u0432\u044f\u0437\u0438 \u0435\u0441\u043b\u0438 \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u0438 \u0432\u043e\u043f\u0440\u043e\u0441\u044b <a href=\"https:\/\/t.me\/antokols\" rel=\"noopener noreferrer nofollow\">https:\/\/t.me\/antokols<\/a> .<\/p>\n<p>\u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043e\u0442\u0432\u0435\u0442\u043e\u0432 \u043d\u0430 \u0432\u043e\u043f\u0440\u043e\u0441\u044b \u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u0432\u0442\u043e\u0440\u0443\u044e \u0447\u0430\u0441\u0442\u044c, \u043d\u0430\u0434\u0435\u044e\u0441\u044c \u043e\u043d\u0430 \u0431\u0443\u0434\u0435\u0442 \u043a\u0440\u0430\u0439\u043d\u0435\u0439 \u043f\u043e \u044d\u0442\u043e\u0439 \u0442\u0435\u043c\u0435<\/p>\n<p><a href=\"https:\/\/habr.com\/ru\/post\/677290\/\" rel=\"noopener noreferrer nofollow\">https:\/\/habr.com\/ru\/post\/677290\/<\/a><\/p>\n<\/p>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/675092\/\"> https:\/\/habr.com\/ru\/articles\/675092\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u0421\u0440\u0430\u0437\u0443 \u0441\u043a\u0430\u0436\u0443, \u0432 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043d\u0435 \u0431\u0443\u0434\u0443\u0442 \u043e\u043f\u0438\u0441\u0430\u043d\u044b \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b \u0442\u043e\u0440\u0433\u043e\u0432\u043b\u0438, \u0445\u043e\u0442\u044f \u043e\u043d\u0438 \u0435\u0441\u0442\u044c \u0438 \u043f\u0440\u0438\u043d\u043e\u0441\u044f\u0442 \u043f\u0440\u0438\u0431\u044b\u043b\u044c. \u041c\u043e\u044f \u0446\u0435\u043b\u044c \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0432\u0430\u043c \u0443\u0434\u043e\u0431\u043d\u044b\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0431\u043e\u0442\u043e\u0432 \u0438 \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u0441\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c \u043f\u044f\u0442\u0438\u043b\u0435\u0442\u043d\u0435\u0439 \u0440\u0430\u0431\u043e\u0442\u044b. \u0415\u0441\u043b\u0438 \u043a\u043e\u043c\u0443-\u0442\u043e \u043d\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b \u0431\u043e\u0442\u044b, \u0442\u043e \u0437\u0434\u0435\u0441\u044c \u0435\u0441\u0442\u044c \u043e\u0434\u043d\u043e \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043a\u0430\u043a \u0432\u0438\u0448\u0435\u043d\u043a\u0430 \u043d\u0430 \u0442\u043e\u0440\u0442\u0435 \u043c\u043e\u0436\u0435\u0442 \u043c\u043d\u043e\u0433\u0438\u0445 \u0437\u0430\u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043e\u0432\u0430\u0442\u044c, \u0430\u043d\u0430\u043b\u043e\u0433 dbms_pipe \u0432 ORACLE, \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043d\u0430 \u0447\u0438\u0441\u0442\u043e\u043c pgsql, \u043d\u0443 \u0430 \u0442\u0430\u043a\u0436\u0435 \u043c\u043d\u043e\u0433\u043e \u0434\u0440\u0443\u0433\u0438\u0445 \u043c\u043e\u0438\u0445 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0440\u0435\u0448\u0435\u043d\u0438\u0439. \u00a0\u042d\u0442\u043e \u043d\u0435 \u043e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u043c\u043e\u044f \u0440\u0430\u0431\u043e\u0442\u0430, \u0441\u043a\u043e\u0440\u0435\u0435 \u0445\u043e\u0431\u0431\u0438. \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u0431\u044b\u043b \u043f\u0440\u043e\u0441\u0442\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043b \u0435\u0441\u043b\u0438 \u043d\u0435 \u043f\u043b\u044e\u0441, \u0442\u043e \u0445\u043e\u0442\u044f \u0431\u044b \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0441\u0440\u0435\u0434\u0441\u0442\u0432 \u043d\u0430 \u043f\u0430\u0434\u0430\u044e\u0449\u0435\u043c \u0440\u044b\u043d\u043a\u0435, \u043f\u0440\u043e \u0440\u0430\u0441\u0442\u0443\u0449\u0438\u0439 \u0440\u044b\u043d\u043e\u043a \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c \u043d\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u0442\u0430\u043c \u0438 \u0442\u0430\u043a \u0432\u0441\u0435 \u0445\u043e\u0440\u043e\u0448\u043e. \u041f\u043e \u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044e \u044f \u043d\u0435 \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0441\u0442, \u00a0\u0430 \u0441\u043e\u0432\u0435\u0442\u0441\u043a\u0438\u0439 \u0430\u0439\u0442\u0438\u0448\u043d\u0438\u043a, \u0438 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0441\u0432\u043e\u0438\u0445 \u043d\u0435\u0432\u0438\u0434\u0438\u043c\u044b\u0445 \u0441\u043e\u043f\u0435\u0440\u043d\u0438\u043a\u043e\u0432 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u043b \u0432\u043e\u043b\u043a\u043e\u0432 \u0441 \u0423\u043e\u043b\u0442 \u0441\u0442\u0440\u0438\u0442. \u0414\u043b\u044f \u043c\u0435\u043d\u044f \u044d\u0442\u043e \u0431\u044b\u043b \u0432\u044b\u0437\u043e\u0432 \u0441\u0440\u043e\u0434\u043d\u0438 \u0438\u0437\u043e\u0431\u0440\u0435\u0442\u0435\u043d\u0438\u044e \u0432\u0435\u0447\u043d\u043e\u0433\u043e \u0434\u0432\u0438\u0433\u0430\u0442\u0435\u043b\u044f, \u043d\u043e \u0441 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c\u044e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438. \u0412 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u0442\u043e\u0440\u0433\u043e\u0432\u043b\u0438 \u043c\u043d\u0435 \u0441\u0438\u043b\u044c\u043d\u043e \u043f\u043e\u043c\u043e\u0433\u043b\u0430 \u043a\u043d\u0438\u0433\u0430 \u042d\u0434\u0432\u0438\u043d\u0430 \u041b\u0435\u0444\u0435\u0432\u0440\u0430 &#171;\u0412\u043e\u0441\u043f\u043e\u043c\u0438\u043d\u0430\u043d\u0438\u044f \u0431\u0438\u0440\u0436\u0435\u0432\u043e\u0433\u043e \u0441\u043f\u0435\u043a\u0443\u043b\u044f\u043d\u0442\u0430&#187;. \u0418\u0442\u0430\u043a, \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0438\u043c.<\/p>\n<h3>\u0422\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0435 \u043a \u0431\u043e\u0442\u0443<\/h3>\n<ol>\n<li>\n<p>\u0411\u043e\u0442 \u0434\u043e\u043b\u0436\u0435\u043d \u0437\u0430\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0434\u0435\u043d\u0435\u0433 \u0431\u043e\u043b\u044c\u0448\u0435 \u0447\u0435\u043c \u0431\u0430\u043d\u043a\u043e\u0432\u0441\u043a\u0438\u0435 \u0432\u043a\u043b\u0430\u0434\u044b, \u0442\u043e \u0435\u0441\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435 \u0447\u0435\u043c 5% \u0432 \u0432\u0430\u043b\u044e\u0442\u0435. \u0421\u0440\u0430\u0437\u0443 \u0441\u043a\u0430\u0436\u0443 \u044d\u0442\u043e \u0434\u043e\u0441\u0442\u0438\u0433\u043d\u0443\u0442\u043e, \u0431\u043e\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0443\u0436\u0435 3 \u0433\u043e\u0434\u0430 \u0438 \u0434\u043e\u0445\u043e\u0434 \u0434\u0430\u0436\u0435 \u043d\u0430 \u043f\u0430\u0434\u0430\u044e\u0449\u0435\u043c \u0440\u044b\u043d\u043a\u0435 \u043d\u0435 \u043e\u043f\u0443\u0441\u043a\u0430\u043b\u0441\u044f \u043d\u0438\u0436\u0435 35%. \u0412 \u0445\u043e\u0440\u043e\u0448\u0438\u0439 \u0433\u043e\u0434 \u0434\u043e\u0441\u0442\u0438\u0433\u0430\u043b 100%. \u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b \u0437\u0434\u0435\u0441\u044c \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c \u043d\u0435 \u0431\u0443\u0434\u0443. \u0422\u0430\u043a \u0436\u0435 \u043f\u043e\u043d\u0438\u043c\u0430\u044e, \u0447\u0442\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b \u0438 \u0443\u0431\u044b\u0442\u043a\u0438 \u0438 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0434\u043e\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e \u0432\u0441\u0435\u0433\u0434\u0430 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438\u0431\u044b\u043b\u044c \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0438 \u044f \u0432\u0441\u0435\u0433\u0434\u0430 \u0433\u043e\u0442\u043e\u0432 \u0447\u0442\u043e \u0431\u0443\u0434\u0443\u0442 \u0443\u0431\u044b\u0442\u043a\u0438.   <\/p>\n<\/li>\n<li>\n<p>. \u041b\u0435\u0433\u043a\u043e\u0441\u0442\u044c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432 \u0438 \u043f\u0440\u043e\u0433\u043e\u043d \u044d\u0442\u0438\u0445 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432 \u043d\u0430 \u0438\u0441\u0442\u043e\u0440\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445. \u042f \u043f\u043e\u0441\u0442\u0430\u0440\u0430\u044e\u0441\u044c \u0432\u0430\u0441 \u0443\u0431\u0435\u0434\u0438\u0442\u044c \u0432 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435, \u0447\u0442\u043e \u043b\u0443\u0447\u0448\u0435 pgsql \u0432\u044b \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u0442\u0435. \u0413\u043b\u0430\u0432\u043d\u043e\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0442\u044c \u0432\u0430\u043c \u0441\u043e\u0441\u0440\u0435\u0434\u043e\u0442\u0430\u0447\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u0438\u043c\u0435\u043d\u043d\u043e \u043d\u0430 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0435, \u0430 \u043d\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438.<\/p>\n<\/li>\n<li>\n<p>\u041d\u0430\u0434\u0435\u0436\u043d\u043e\u0441\u0442\u044c \u0431\u043e\u0442\u0430, \u043e\u043d \u0434\u043e\u043b\u0436\u0435\u043d \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c 24 \u043d\u0430 7. \u042d\u0442\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043e, \u043f\u0430\u0434\u0430\u0435\u0442 \u0431\u0438\u043d\u0430\u043d\u0441 \u043d\u043e \u043d\u0435 \u0431\u043e\u0442.   <\/p>\n<\/li>\n<li>\n<p>\u041f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c, \u0441\u0435\u0439\u0447\u0430\u0441 \u044f \u0442\u043e\u0440\u0433\u0443\u044e 350 \u043f\u0430\u0440\u0430\u043c\u0438 \u043a\u0440\u0438\u043f\u0442\u043e\u0432\u0430\u043b\u044e\u0442 \u0432 \u043f\u0430\u0440\u0435 \u043a USDT \u0438 \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u0441 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u044e, \u043d\u0435\u0442. \u0420\u0430\u0437 \u0432 \u043c\u0438\u043d\u0443\u0442\u0443 \u044f \u043e\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u044e \u0431\u0438\u0440\u0436\u0443 \u043f\u043e \u044d\u0442\u0438\u043c \u043f\u0430\u0440\u0430\u043c \u0438 \u0432 \u0442\u0435\u0447\u0435\u043d\u0438\u0438 30 \u0441\u0435\u043a\u0443\u043d\u0434 \u0432\u0441\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e \u0432\u0441\u0435\u043c \u043f\u0430\u0440\u0430\u043c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u044b. \u0417\u0430\u043f\u0430\u0441 \u043f\u0440\u043e\u0447\u043d\u043e\u0441\u0442\u0438 \u0435\u0449\u0435 \u0435\u0441\u0442\u044c.<\/p>\n<\/li>\n<li>\n<p>\u041b\u0435\u0433\u043a\u043e\u0441\u0442\u044c \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. \u0412\u0441\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0430 \u043d\u0430 pgsql, \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u0438\u043c\u043f\u043e\u0440\u0442 \u044d\u043a\u0441\u043f\u043e\u0440\u0442. \u041f\u0440\u043e\u0431\u043b\u0435\u043c \u0441 \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u043d\u0435\u0442.<\/p>\n<\/li>\n<\/ol>\n<h3>\u041f\u043e\u0447\u0435\u043c\u0443 Postgres<\/h3>\n<ol>\n<li>\n<p>\u0423\u0434\u043e\u0431\u043d\u044b\u0439 \u043f\u0430\u043a\u0435\u0442 pgsql-http \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u0431\u0449\u0430\u0442\u044c\u0441\u044f \u0441 \u0432\u043d\u0435\u0448\u043d\u0438\u043c \u043c\u0438\u0440\u043e\u043c \u0438\u0437 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u043d\u044b\u0445 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440.<\/p>\n<\/li>\n<li>\n<p>\u0411\u044b\u0441\u0442\u0440\u0430\u044f \u0438 \u0443\u0434\u043e\u0431\u043d\u0430\u044f \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 json.<\/p>\n<\/li>\n<li>\n<p>\u0411\u043e\u043b\u044c\u0448\u043e\u0439 \u043d\u0430\u0431\u043e\u0440 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0439.<\/p>\n<\/li>\n<li>\n<p>\u0423\u0434\u043e\u0431\u043d\u044b\u0439 \u043f\u0430\u043a\u0435\u0442 dblink \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0438\u0439 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u043c\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432 postgres.<\/p>\n<\/li>\n<li>\n<p>Sql \u043f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u044b\u0439 \u044f\u0437\u044b\u043a \u0434\u043b\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438, \u044d\u0442\u043e \u0432\u0430\u0436\u043d\u043e \u043a\u043e\u0433\u0434\u0430 \u0432\u0434\u0440\u0443\u0433 \u0434\u0432\u0430 \u0438\u043b\u0438 \u0442\u0440\u0438 \u0431\u043e\u0442\u0430 \u0440\u0435\u0448\u0430\u0442 \u0432 \u043e\u0434\u0438\u043d \u043c\u043e\u043c\u0435\u043d\u0442 \u043a\u0443\u043f\u0438\u0442\u044c \u0438\u043b\u0438 \u043f\u0440\u043e\u0434\u0430\u0442\u044c \u0441\u0432\u043e\u0439 \u0430\u043a\u0442\u0438\u0432.<\/p>\n<\/li>\n<li>\n<p>\u0423\u0434\u043e\u0431\u043d\u044b\u0439 IDE \u0432 \u0432\u0438\u0434\u0435 pgadmin, \u0441 \u043b\u044e\u0431\u043e\u0433\u043e \u0440\u0430\u0431\u043e\u0447\u0435\u0433\u043e \u043c\u0435\u0441\u0442\u0430 \u043c\u043e\u0436\u043d\u043e \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u044f \u0447\u0435\u0440\u0435\u0437 \u0431\u0440\u0430\u0443\u0437\u0435\u0440, \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u043a\u043e\u0434\u043e\u043c.   <\/p>\n<\/li>\n<li>\n<p>\u042f \u0437\u043d\u0430\u044e \u0438 \u043b\u044e\u0431\u043b\u044e postgres \u043a\u0430\u043a \u0432 \u043f\u0440\u043e\u0447\u0435\u043c \u0438 oracle, \u043d\u043e oracle \u0437\u0430 \u043b\u044e\u0431\u043e\u0432\u044c \u0434\u0435\u043d\u0435\u0433 \u0445\u043e\u0447\u0435\u0442.<\/p>\n<\/li>\n<\/ol>\n<p>\u041a\u0430\u043a \u043f\u0440\u0438\u043c\u0435\u0440 \u0432\u044b\u0448\u0435 \u0441\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u0432\u043e\u0436\u0443 \u0437\u0430\u043f\u0440\u043e\u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043e\u0431\u044a\u0451\u043c \u0432 \u0441\u0442\u0430\u043a\u0430\u043d\u0435 \u0431\u0438\u043d\u0430\u043d\u0441\u0430\u00a0 \u043d\u0430 \u043f\u043e\u043a\u0443\u043f\u043a\u0443 \u0441 \u043e\u0442\u043a\u043b\u043e\u043d\u0435\u043d\u0438\u0435\u043c \u0432 3% \u0432\u043d\u0438\u0437 \u0438 \u0432 \u0432\u0435\u0440\u0445.   <\/p>\n<pre><code class=\"pgsql\">WITH depth AS (SELECT (content::jsonb)->'asks' a, (content::jsonb)->'bids' b FROM        http_get('https:\/\/api.binance.com\/api\/v1\/depth?symbol=BTCUSDT&amp;limit=5000'))   SELECT       (SELECT va  FROM (         SELECT (j->>0)::float8 pa, sum((j->>1)::float8) OVER (ORDER BY j->>0) va FROM               jsonb_array_elements(a) j) t WHERE pa &lt;= (a#>>'{0,0}')::float8 * 1.03 ORDER BY va DESC LIMIT 1) va,     (SELECT vb   FROM (         SELECT (j->>0)::float8 pb, sum((j->>1)::float8) OVER (ORDER BY j->>0 DESC) vb FROM               jsonb_array_elements(b) j) t WHERE pb >= (b#>>'{0,0}')::float8 * 0.97 ORDER BY vb DESC LIMIT 1) vb FROM depth <\/code><\/pre>\n<p>\u0410 \u0442\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u0432\u0441\u0435 \u0442\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0430 \u0434\u0440\u0443\u0433\u043e\u043c \u044f\u0437\u044b\u043a\u0435. \u041a\u043e\u043d\u0435\u0447\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f, \u043d\u043e \u0434\u0443\u043c\u0430\u044e \u0431\u0443\u0434\u0435\u0442 \u043d\u0435 \u0442\u0430\u043a \u0438\u0437\u044f\u0449\u043d\u043e.<\/p>\n<h3>\u041e\u0431\u0449\u0430\u044f \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u044b.<\/h3>\n<p>\u0421\u0438\u0441\u0442\u0435\u043c\u0430 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u043c\u043e\u0434\u0443\u043b\u0435\u0439<\/p>\n<ol>\n<li>\n<p>\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430, \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0430 \u043d\u0430\u00a0 pgsql.<\/p>\n<\/li>\n<li>\n<p>\u0411\u043e\u0442\u044b, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c\u044b\u0435 \u0441 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u043c \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u043e\u0432 \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u0431\u043e\u0442\u044b \u0434\u0435\u043b\u044f\u0442\u0441\u044f \u043d\u0430 \u0441\u043b\u0443\u0436\u0435\u0431\u043d\u044b\u0435 \u0438 \u0431\u043e\u0442\u044b \u0434\u043b\u044f \u0442\u043e\u0440\u0433\u043e\u0432\u043b\u0438. \u0411\u043e\u0442\u044b \u0434\u043b\u044f \u0442\u043e\u0440\u0433\u043e\u0432\u043b\u0438 \u0440\u0430\u0437\u0434\u0435\u043b\u044f\u044e\u0442\u0441\u044f \u043d\u0430 \u0431\u043e\u0442\u044b, \u0442\u043e\u0440\u0433\u0443\u044e\u0449\u0438\u0435 \u0432 LONG \u0438 \u0431\u043e\u0442\u044b, \u0442\u043e\u0440\u0433\u0443\u044e\u0449\u0438\u0435 \u0432 SHORT. \u0421\u043b\u0443\u0436\u0435\u0431\u043d\u044b\u0435 \u0431\u043e\u0442\u044b \u2014 \u044d\u0442\u043e \u0431\u043e\u0442 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0442\u0435\u043b\u0435\u0433\u0440\u0430\u043c\u043c \u0438 \u0431\u043e\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u0435\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c \u043e\u0431\u0449\u0443\u044e \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u044e \u0442\u043e\u0440\u0433\u043e\u0432\u043b\u0438 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u043f\u0430\u0440, \u0432 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u044f \u0435\u0433\u043e \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043d\u0435 \u0441\u043c\u043e\u0433 \u043e\u0442\u0432\u0435\u0442\u0438\u0442\u044c \u043d\u0430 \u0432\u043e\u043f\u0440\u043e\u0441, \u043d\u0430 \u0434\u043e \u043b\u0438 \u0441\u0432\u044f\u0437\u044b\u0432\u0430\u0442\u044c \u043c\u0435\u0436\u0434\u0443 \u0441\u043e\u0431\u043e\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0442\u043e\u0440\u0433\u043e\u0432 \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u043f\u0430\u0440\u0430\u043c\u0438. \u0421\u0435\u0439\u0447\u0430\u0441 \u043e\u043d\u0438 \u0443 \u043c\u0435\u043d\u044f \u0442\u043e\u0440\u0433\u0443\u044e\u0442\u0441\u044f \u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e. \u042d\u0442\u043e \u043a\u0430\u043a \u043f\u0440\u0438\u043c\u0435\u0440 \u0438\u0433\u0440\u044b \u0432 \u043a\u0430\u0437\u0438\u043d\u043e \u0432\u044b \u0438\u0433\u0440\u0430\u0435\u0442\u0435 \u0437\u0430 \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u0441\u0442\u043e\u043b\u0430\u043c\u0438, \u0438 \u0435\u0441\u043b\u0438 \u0432 \u0441\u0443\u043c\u043c\u0435 \u0432\u044b \u0432\u044b\u0438\u0433\u0440\u0430\u0439\u0442\u0435, \u043f\u0440\u0435\u043a\u0440\u0430\u0449\u0430\u0442\u044c \u0438\u0433\u0440\u0430\u0442\u044c \u0437\u0430 \u0432\u0441\u0435\u043c\u0438 \u0441\u0442\u043e\u043b\u0430\u043c\u0438 \u0438\u043b\u0438 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0442\u044c \u0438\u0433\u0440\u0430\u0442\u044c \u043d\u0430 \u0432\u0441\u0435\u0445 \u0441\u0442\u043e\u043b\u0430\u0445 \u0434\u0430\u043b\u044c\u0448\u0435. \u042d\u043c\u0443\u043b\u044f\u0442\u043e\u0440 \u043f\u043e\u043a\u0430\u0437\u0430\u043b \u043c\u043d\u0435 \u0447\u0442\u043e \u043b\u0443\u0447\u0448\u0435 \u0442\u043e\u0440\u0433\u043e\u0432\u0430\u0442\u044c \u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e \u043e\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 \u0442\u043e\u0440\u0433\u043e\u0432\u043b\u0438 \u0432 \u0434\u0440\u0443\u0433\u0438\u0445 \u043f\u0430\u0440\u0430\u0445, \u043d\u043e \u044f \u043d\u0435 \u0443\u0432\u0435\u0440\u0435\u043d, \u0447\u0442\u043e \u044d\u0442\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e. \u0411\u043e\u0442\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u044b \u043d\u0430 pgsql.<\/p>\n<\/li>\n<li>\n<p>\u0411\u043e\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0449\u0438\u0439 \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0438\u0437 pipe, \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043d\u0430\u00a0 pgsql.<\/p>\n<\/li>\n<li>\n<p>\u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0434\u043b\u044f \u043f\u043e\u0441\u044b\u043b\u043a\u0438 \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u043e\u0441\u0442\u0430\u043d\u043e\u0432, \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435, \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043d\u0430\u00a0 pgsql.<\/p>\n<\/li>\n<li>\n<p>\u041a\u043e\u043c\u0430\u043d\u0434\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0438 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0430 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b, \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u044b \u043d\u0430 bash.<\/p>\n<\/li>\n<\/ol>\n<p>\u0415\u0441\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u0431\u043e\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430\u0434\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0447\u0435\u0440\u0435\u0437 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0435 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u044b \u0432\u0440\u0435\u043c\u0435\u043d\u0438. \u0411\u043e\u0442 \u2014 \u044d\u0442\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u043d\u0430\u044f \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430 \u043d\u0430 pgsql. \u0411\u043e\u0442\u044b \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u044e\u0442\u0441\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u0441\u044f \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e, \u043a\u0430\u0436\u0434\u044b\u0439 \u0432 \u0441\u0432\u043e\u0435\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 postgres. \u0411\u043e\u0442\u044b \u0434\u0435\u043b\u044f\u0442\u0441\u044f \u043d\u0430 \u0434\u0432\u0430 \u043a\u043b\u0430\u0441\u0441\u0430 \u0442\u043e\u0440\u0433\u043e\u0432\u044b\u0435 \u0438 \u0441\u043b\u0443\u0436\u0435\u0431\u043d\u044b\u0435. \u0422\u043e\u0440\u0433\u043e\u0432\u044b\u0435 \u0431\u043e\u0442\u044b \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0435, \u043d\u043e \u043c\u043e\u0436\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0438 \u0440\u0430\u0437\u043d\u044b\u0435, \u043a\u0430\u0436\u0434\u044b\u0439 \u0442\u043e\u0440\u0433\u0443\u0435\u0442 \u0441\u0432\u043e\u0435\u0439 \u043f\u0430\u0440\u043e\u0439 \u043a\u0440\u0438\u043f\u0442\u043e\u0432\u0430\u043b\u044e\u0442. \u0421\u043b\u0443\u0436\u0435\u0431\u043d\u044b\u0445 \u0431\u043e\u0442\u043e\u0432 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e, \u0431\u043e\u0442 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0442\u0435\u043b\u0435\u0433\u0440\u0430\u043c\u043c, \u0431\u043e\u0442 \u0434\u043b\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 (\u044d\u043c\u0443\u043b\u044f\u0446\u0438\u044f \u0430\u0432\u0442\u043e\u043d\u043e\u043c\u043d\u044b\u0445 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0439), \u0442\u0430\u043a\u0438\u0435 \u043a\u0430\u043a \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438\u043b\u0438 \u0432\u044b\u0432\u043e\u0434 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0432 \u0442\u0435\u043b\u0435\u0433\u0440\u0430\u043c\u043c \u0438 \u043f\u0440\u043e\u0447\u0438\u0435 \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0431\u043e\u0442\u044b.\u00a0 \u0413\u043b\u0430\u0432\u043d\u0430\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u0431\u043e\u0442\u044b \u0432 \u0446\u0438\u043a\u043b\u0435, \u0441 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u043c \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u043e\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u0438. \u041c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u0442\u0430\u043a \u0447\u0442\u043e \u0431\u044b \u043a\u0430\u0436\u0434\u044b\u0439 \u0431\u043e\u0442 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u043b \u0432\u0440\u0435\u043c\u044f, \u043a\u043e\u0433\u0434\u0430 \u0435\u0433\u043e \u043d\u0430\u0434\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c, \u043d\u043e \u044d\u0442\u043e \u044f \u043e\u0442\u043b\u043e\u0436\u0438\u043b \u043d\u0430 \u0431\u0443\u0434\u0443\u0449\u0435\u0435.<\/p>\n<pre><code class=\"pgsql\">CREATE TABLE crypto_bot2.bots (     key text primary key,     name text ,     params jsonb,     is_run boolean,     comment text  )   <\/code><\/pre>\n<p>\u0412 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 bots \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442\u0441\u044f \u0441\u043f\u0438\u0441\u043e\u043a \u0431\u043e\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c\u0441\u044f. Key \u2013 \u044d\u0442\u043e \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u043a\u043b\u044e\u0447 \u0431\u043e\u0442\u0430, \u0434\u043b\u044f \u0442\u043e\u0440\u0433\u043e\u0432\u044b\u0445 \u0431\u043e\u0442\u043e\u0432 \u043e\u043d \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u0438\u043c\u044f \u0442\u043e\u0440\u0433\u043e\u0432\u043e\u0439 \u043f\u0430\u0440\u044b, name \u0438\u043c\u044f \u0431\u043e\u0442\u0430, \u0438\u043c\u044f \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u043d\u043e\u0439 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b, params \u2013 \u044d\u0442\u043e \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0431\u043e\u0442\u0430 \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u043e\u043d \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, is_run \u0444\u043b\u0430\u0433 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0431\u043e\u0442 \u043d\u0430\u0434\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0438\u043b\u0438 \u043d\u0435\u0442, \u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u043f\u043e\u043b\u0435 \u2014 \u044d\u0442\u043e \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439. \u0412\u043e\u0442 \u043a\u0430\u043a \u0432\u0435\u0440\u0445\u043d\u044f\u044f \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0447\u0430\u0441\u0442\u044c \u0434\u0430\u043d\u043d\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b. \u0412 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u0441\u044f \u043a\u0430\u043a \u0441\u043b\u0443\u0436\u0435\u0431\u043d\u044b\u0435 \u0431\u043e\u0442\u044b, \u0442\u0430\u043a \u0438 \u0431\u043e\u0442\u044b \u0434\u043b\u044f \u0442\u043e\u0440\u0433\u043e\u0432\u043b\u0438. \u0411\u043e\u0442\u044b \u0434\u043b\u044f \u0442\u043e\u0440\u0433\u043e\u0432\u043b\u0438 \u0434\u0435\u043b\u044f\u0442\u0441\u044f \u043d\u0430 \u0442\u043e\u0440\u0433\u0443\u044e\u0449\u0438\u0435 \u0432 Long \u0438 Short. \u0414\u043b\u044f \u0442\u043e\u0440\u0433\u043e\u0432\u043b\u0438 \u0432 Short \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e \u043c\u043e\u043d\u0435\u0442\u044b DOWN \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 binance, \u043d\u043e \u0432 \u0431\u0443\u0434\u0443\u0449\u0435\u043c \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u044e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u043c\u0430\u0440\u0436\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u0442\u043e\u0440\u0433\u043e\u0432\u043b\u0435\u0439, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439 \u0431\u043e\u043b\u044c\u0448\u0435. \u0412\u043e\u0442 \u043a\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u0432 \u0431\u0430\u0437\u0435.<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0447\u0430\u0441\u0442\u044c \u043a\u043e\u0434\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u044d\u0442\u0438 \u0431\u043e\u0442\u044b, \u0434\u0430\u043b\u044c\u0448\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d \u043f\u043e\u043b\u043d\u044b\u0439 \u043a\u043e\u0434 \u0433\u043b\u0430\u0432\u043d\u043e\u0439 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b. <\/p>\n<pre><code class=\"pgsql\">bot_cmd = CASE WHEN is_restart THEN 'restart' ELSE 'start' END;     LOOP         wt = clock_timestamp();         SELECT * INTO st FROM  crypto_bot2.bot_state t ;         IF (st.status = 'STOP') THEN            bot_cmd = 'stop';        ELSE IF (clock_timestamp() - start_time > restart_interval)THEN            SELECT count(*) INTO wi FROM crypto_bot2.bots WHERE params->>'buy_price' IS NOT NULL;            IF (wi = 0 OR clock_timestamp() - start_time > restart_interval * 5) THEN                bot_cmd = 'pre_restart';            END IF;     END IF; END IF;     FOR bot IN (SELECT * FROM crypto_bot2.bots WHERE is_run) LOOP     dblnk = dblinks->bot.key;     IF (dblnk IS NULL) THEN             dblnk = 'dblink_' || bot.key;             PERFORM crypto_bot2.create_dblink(dblnk);             PERFORM dblink_exec(dblnk, format('CALL crypto_bot2.init_bot(''%s'')', dblnk));             dblinks = CASE WHEN dblinks IS NULL THEN hstore(bot.key, dblnk)                ELSE dblinks || hstore(bot.key, dblnk) END;          END IF;         IF (dblink_is_busy(dblnk) = 0) THEN              PERFORM crypto_bot2.clear_dblink(dblnk);              PERFORM dblink_send_query(dblnk, format('SELECT crypto_bot2.%s(''%s'', ''%s'')', bot.name, bot.key,              bot_cmd));         END IF;     END LOOP;     EXIT WHEN bot_cmd IN ('stop', 'pre_restart');     wi = req_time - EXTRACT(epoch FROM(clock_timestamp() - wt));     IF (wi > 0) THEN         PERFORM pg_sleep(wi);     END IF;     bot_cmd = 'work'; END LOOP; FOR bot IN (SELECT * FROM each(dblinks)) LOOP     PERFORM dblink_disconnect(bot.value); END LOOP; <\/code><\/pre>\n<p>\u041a\u0430\u043a \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0432\u0438\u0434\u0435\u0442\u044c \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u0439 \u0437\u0430\u043f\u0443\u0441\u043a \u0447\u0435\u0440\u0435\u0437 dblink_send_query, \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 \u0431\u043e\u0442\u0443 \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442\u0441\u044f \u0435\u0433\u043e key. \u0414\u0430\u043d\u043d\u044b\u0439 \u0446\u0438\u043a\u043b \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0440\u0430\u0437 \u0432 5 \u0441\u0435\u043a\u0443\u043d\u0434. \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u0443\u044e \u0447\u0430\u0441\u0442\u044c, \u043a\u043e\u0433\u0434\u0430 \u0431\u043e\u0442\u0430.<\/p>\n<pre><code class=\"pgsql\">BEGIN     SELECT params INTO p_params FROM crypto_bot2.bots WHERE key=p_pair;     save_params = p_params;     last_call = current_setting(last_call_key, true)::timestamptz;     IF (last_call IS NULL OR (clock_timestamp() - last_call) > '55S'::interval          OR clock_timestamp() - date_trunc('minute', clock_timestamp()) &lt; '5S'::interval) THEN <\/code><\/pre>\n<p>\u0412\u043d\u0430\u0447\u0430\u043b\u0435 \u0431\u043e\u0442 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0441\u0432\u043e\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0438\u0437 \u0442\u0430\u0431\u043b\u0438\u0446\u044b bots \u0438 \u0437\u0430\u0442\u0435\u043c \u0441\u043c\u043e\u0442\u0440\u0438\u0442, \u043a\u043e\u0433\u0434\u0430 \u0435\u0433\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0440\u0430\u0437 \u0432\u044b\u0437\u044b\u0432\u0430\u043b\u0438 \u0438 \u0435\u0441\u043b\u0438 \u043f\u0440\u043e\u0448\u043b\u043e \u043c\u0435\u043d\u044c\u0448\u0435 55 \u0441\u0435\u043a\u0443\u043d\u0434, \u0442\u043e \u043f\u0440\u0435\u043a\u0440\u0430\u0449\u0430\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c, \u0431\u043e\u0442 \u0434\u043b\u044f \u0442\u0435\u043b\u0435\u0433\u0440\u0430\u043c\u043c\u0430 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u043a\u0430\u0436\u0434\u044b\u0435 5 \u0441\u0435\u043a\u0443\u043d\u0434 \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u043d\u0435 \u043f\u0440\u0438\u0441\u043b\u0430\u043b\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u043e\u0442 \u0445\u043e\u0437\u044f\u0438\u043d\u0430 \u0438\u043b\u0438 \u043d\u0435 \u043d\u0430\u0434\u043e \u043b\u0438 \u0447\u0442\u043e \u0441\u043e\u043e\u0431\u0449\u0438\u0442\u044c \u0445\u043e\u0437\u044f\u0438\u043d\u0443. \u00a0\u0412 \u043a\u043e\u043d\u0446\u0435 \u0440\u0430\u0431\u043e\u0442\u044b \u0431\u043e\u0442\u0430, \u0431\u043e\u0442 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 bots \u0447\u0442\u043e \u0431\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438\u0445 \u043f\u0440\u0438 \u043d\u043e\u0432\u043e\u043c \u0432\u044b\u0437\u043e\u0432\u0435.<\/p>\n<pre><code class=\"pgsql\">IF (save_params != p_params) THEN       UPDATE crypto_bot2.bots SET params = p_params WHERE key=p_pair; END IF;<\/code><\/pre>\n<p>\u0421\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u0441\u0434\u0435\u043b\u0430\u043d\u043e \u043f\u043e \u0434\u0432\u0443\u043c \u043f\u0440\u0438\u0447\u0438\u043d\u0430\u043c, \u043f\u0435\u0440\u0432\u043e\u0435 \u0432 postgresql \u043d\u0435\u0442 \u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u0433\u0434\u0435 \u043c\u043e\u0436\u043d\u043e \u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0443\u0434\u043e\u0431\u043d\u043e \u0441\u0435\u0441\u0441\u0438\u043e\u043d\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0438 \u0432\u0442\u043e\u0440\u043e\u0435 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0431\u043e\u0442\u0430 \u0441\u0435\u0441\u0441\u0438\u043e\u043d\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043d\u0430\u0441 \u043d\u0435 \u0441\u043f\u0430\u0441\u0443\u0442. \u041f\u0440\u043e\u0448\u0443 \u043f\u0440\u043e\u0449\u0435\u043d\u0438\u044f \u0435\u0441\u043b\u0438 \u043d\u0435 \u0441\u0443\u043c\u0435\u043b \u0434\u043e\u043d\u0435\u0441\u0442\u0438 \u043e\u0441\u043d\u043e\u0432\u043d\u0443\u044e \u0438\u0434\u0435\u044e, \u043d\u043e \u0434\u0443\u043c\u0430\u044e \u0435\u0441\u043b\u0438 \u0432\u044b \u0441\u0443\u043c\u0435\u0435\u0442\u0435 \u043f\u0440\u043e\u0447\u0435\u0441\u0442\u044c \u0434\u043e \u043a\u043e\u043d\u0446\u0430, \u0442\u043e \u0432\u0441\u0435 \u043f\u0440\u043e\u044f\u0441\u043d\u0438\u0442\u0441\u044f.<\/p>\n<h3>\u041f\u0430\u043a\u0435\u0442 pgsql-http<\/h3>\n<p><a href=\"https:\/\/github.com\/pramsey\/pgsql-http\" rel=\"noopener noreferrer nofollow\">https:\/\/github.com\/pramsey\/pgsql-http<\/a><\/p>\n<p>\u042d\u0442\u043e \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e \u0434\u043b\u044f \u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0441 \u0432\u043d\u0435\u0448\u043d\u0438\u043c \u043c\u0438\u0440\u043e\u043c.\u00a0 \u042f \u0441\u0434\u0435\u043b\u0430\u043b \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0443\u044e \u043e\u0431\u0435\u0440\u0442\u043a\u0443 \u0434\u043b\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043e\u0448\u0438\u0431\u043e\u043a \u0441\u0435\u0442\u0438. \u0425\u043e\u0447\u0443 \u043f\u043e\u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u0438\u0442\u044c \u0430\u0432\u0442\u043e\u0440\u0430 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f. \u041e\u0431\u0435\u0440\u0442\u043a\u0430 \u0434\u043b\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f https \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432, \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u043f\u0440\u043e\u0431\u0443\u0435\u043c \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441 .<\/p>\n<pre><code class=\"pgsql\">CREATE OR REPLACE FUNCTION crypto_bot2.https_get(     url text,     params hstore DEFAULT ''::hstore,     OUT status integer, OUT content text) RETURNS record     LANGUAGE 'plpgsql'<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-394959","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/394959","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=394959"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/394959\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=394959"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=394959"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=394959"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}