В systemd есть своя утилита для настройки даты и часового пояса. Чтобы узнать текущее состояние выполните:
timedatectl status

Для просмотра всех доступных временных зон выполните такую команду:
Читать далее «Настройка временной зоны на Ubuntu 18»Рассказываю сложные вещи простыми словами
В systemd есть своя утилита для настройки даты и часового пояса. Чтобы узнать текущее состояние выполните:
timedatectl status
Для просмотра всех доступных временных зон выполните такую команду:
Читать далее «Настройка временной зоны на Ubuntu 18»Для документирование базы данных применяется открытое решение Autodoc.
Инструкция по установке и настройке на сайте appcode.pw
Основной скрипт для запуска генерации документации.
cd autodoc postgresql_autodoc -d cic-dev-db -h 192.168.17.111 -u postgres --password=<pw> -t html -s "core|dbo" -f /var/www/html/cic-dev-db
Демонстрационный вариант документации можно посмотреть на сайте http://cic.it-serv.ru/cic-dev-db.html
Ставим приложение autodoc
$ sudo apt install libdbi-perl libhtml-template-perl libterm-readkey-perl libdbd-pg-perl
$ git clone https://github.com/cbbrowne/autodoc.git
$ cd autodoc
$ sudo make install
Дальше запускаем скрипт
postgresql_autodoc -d cic-dev-db -h 192.168.17.111 -u postgres --password -t html -s core -f cic-dev-db-core
Примечание: схемы можно передать как
-s "core|dbo"
Исходный код: https://github.com/cbbrowne/autodoc
UPDATE dummy
SET customer=subquery.customer,
address=subquery.address,
partn=subquery.partn
FROM (SELECT address_id, customer, address, partn FROM /* big hairy SQL */ ...) AS subquery
WHERE dummy.address_id=subquery.address_id;
UPDATE table T1
SET column1 = T2.column1
FROM
table T2
INNER JOIN table T3 USING (column2)
WHERE T1.column2 = T2.column2;
https://stackoverflow.com/questions/6256610/updating-table-rows-in-postgres-using-subquery
Актуализирована информация по базе данных, обновлена статусная схема маршрутов.
Статусная схема храниться в формате Visio 2019 и увидеть ее можно тут. В формате PNG ниже.
Обновленная Схема базы данных тут.
Читать далее «Обновление»Информация актуальна для пилотной версии МРСК ЦиП на 08.10.2020
В пилотной версии МРСК ЦиП информация может быть импортирована в следующие таблицы:
Примечание: информацию по таблицам можно посмотреть тут
Информация о точках учета должна храниться в таблице dbo.ed_registr_pts. Здесь может храниться любая информация, но при этом должны быть заполнены следующие поля:
Информация о показаниях храниться в двух таблица:
Первичные показания должны быть загружены в систему в обе таблицы, так как генерация показания для новых обходов производится на основе предыдущих данных.
-- пример наличия первичных показаний INSERT INTO dbo.ed_input_meter_readings(f_point, n_value_prev, d_date_prev, n_digit, f_time_zone, f_registr_pts, n_tariff) VALUES ('b17c5973-615c-49c6-976f-7a491a41a160', null, null, 5.0, 2, '028d65a4-3621-408b-af0a-230242f41702', 1); -- создано показание с тарифом 1 и показанием "Сутки" INSERT INTO dbo.ed_output_meter_readings(fn_meter_reading, fn_point, fn_route, fn_user_point, n_value, d_date) VALUES ('394fb071-7d9f-4c13-ada6-3c45b0f1643b', 'b17c5973-615c-49c6-976f-7a491a41a160', 'c68b1a77-0a13-4c05-bc3e-c2504868f0ac', '547c39bd-d171-4cae-bf64-c30fae16210a', null, '2020-05-01');
Алгоритм обработки показаний тут.
Работая с JSON в postgresql заметил следующие момент:
select t.value::uuid from json_array_elements_text('["e7ded0cd-12dd-47f5-a75b-192376291e83"]'::json) as t;select (t.value #>> '{id}')::uuid
from json_array_elements('[{"id": "e7ded0cd-12dd-47f5-a75b-192376291e83"}]'::json) as t;
Две команды возвращают одинаковый результат, но разными способами.
IF (select count(*) from json_array_elements(_users)) > 0 THEN -- select * from dbo.cf_arm_cd_points(1, 5, 1, null, 4); raise notice '%', _users; -- обходчики выбраны и находим все маршруты за текущую дату RETURN QUERY select * from dbo.cf_arm_cd_points((select array_to_json(array_agg(row_to_json(t))) #>> '{id}' from (select r.id from core.cd_userinroutes as uir INNER JOIN core.cd_routes as r ON r.id = uir.f_route where uir.b_main = true and uir.f_user IN ( select (t.value #>> '{f_user}')::integer from json_array_elements(_users) as t ) and _d_date >= r.d_date_start and (core.cf_old_date(r.d_date_end) or core.cf_old_date(r.d_extended))) as t)::json, now()::date); END IF;
Для приложений dotnet применяется следующий механизм настройки виртуального каталога:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { ... app.UseDefaultFiles("/tfs/dev") .UseStaticFiles("/tfs/dev") .UsePathBase("/tfs/dev"); ... }
server {
server_name vnext-bot.appcode.pw;
client_max_body_size 2M;
location / {
try_files $uri $uri/ @proxy;
}
location ~* {
proxy_pass http://127.0.0.1:5000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $server_name;
}
...
}
Статьи:
https://groosha.gitbook.io/telegram-bot-lessons/extra/multiple_bots_2