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;
Рубрика: postgresql
Foreign Data Wrapper
https://riptutorial.com/postgresql/example/29417/foreign-data-wrapper
To access complete schema of server db instead of single table. Follow below steps:
- Create EXTENSION :
CREATE EXTENSION postgres_fdw;
- Create SERVER :
CREATE SERVER server_name FOREIGN DATA WRAPPER postgres_fdw OPTIONS (host 'host_ip',
dbname 'db_name', port 'port_number');
- Create USER MAPPING:
CREATE USER MAPPING FOR CURRENT_USER
SERVER server_name
OPTIONS (user 'user_name', password 'password');
- Create new schema to access schema of server DB:
CREATE SCHEMA schema_name;
- Import server schema:
IMPORT FOREIGN SCHEMA schema_name_to_import_from_remote_db
FROM SERVER server_name
INTO schema_name;
- Access any table of server schema:
SELECT * FROM schema_name.table_name;
This can be used to access multiple schema of remote DB.
Автоматическое создание backup
Ниже написан скрипт для автоматического создания копии БД с последующим восстановлением на тестовой среде.
#!/bin/bash echo "Архивация БД vote-dev" dir_folder=/var/lib/postgresql/vote-dev mkdir -p $dir_folder cd $dir_folder # создание backup pg_dump vote-dev > $dir_folder/vote-dev-day_$(date +\%Y\%m\%d).bak # disconnect БД psql -c "SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE pid <> pg_backend_pid() AND datname = 'vote-test';" # удаление и создание БД dropdb vote-test psql -c 'create database "vote-test";' psql -c 'ALTER DATABASE "vote-test" OWNER TO mobnius;' # восстановление резервной копии psql -U postgres vote-test < $dir_folder/vote-dev-day_$(date +\%Y\%m\%d).bak ls -1tr | head -n -7 | xargs -d '\n' rm -f -- echo "Завершено"
Повышение производительности PostgreSQL после настройки параметров
Многие думают, что изменение параметров в postgresql.conf — это реальный путь к успеху. Однако это не всегда так. Конечно, чаще всего хорошие параметры конфигурации базы данных очень полезны. Тем не менее, во многих случаях реальные проблемы будут возникать из-за странного запроса, скрытого глубоко в некоторой логике приложения. Даже вполне вероятно, что запросы, вызывающие реальные проблемы, не являются теми, на которые вы обратили внимание. Возникает естественный вопрос: как мы можем отследить эти запросы и выяснить, что на самом деле происходит? Мой любимый инструмент для этого — pg_stat_statements, который всегда должен быть включен по моему мнению, если вы используете PostgreSQL 9.2 или выше (пожалуйста, не используйте его в более старых версиях).
Pentaho для работы с отчетами
Скачиваем с данного сайта последние версии приложений:
https://sourceforge.net/projects/pentaho/files/
- pentaho-server-ce-9.0.0.0-423.zip — сервер для запуска отчетов
- prd-ce-9.0.0.0-423.zip — дизайнер отчетов
Потоковая репликация в PostgreSql 10
Для реализации потоковой репликации требуется наличие, как минимума 2-х серверов:
- Имя мастера: master-db / IP 192.168.0.1
- Имя слейва: slave-db / IP 192.168.0.2
Устанавливаем на каждый сервер postgresql:
sudo apt-get update sudo apt-get install postgresql postgresql-contrib
Устанавливаем дополнения:
sudo apt-get install postgis sudo apt install postgresql-10-postgis-scripts sudo apt install postgresql-plv8 sudo apt install nodejs npm
Настраиваем мастер
Создаем пользователя для репликации:
sudo su postgres #В этот момент мы авторизовываемся под пользователем postgres psql postgres=# CREATE USER replica REPLICATION LOGIN CONNECTION LIMIT 2 PASSWORD 'qwe-123'; \qЧитать далее «Потоковая репликация в PostgreSql 10»
Интеграция PostgreSQL с MS SQL Server
Чтобы можно было локально тестировать механизм интеграции лучше установить MSSQL Server Express
Внимание!!! Если сервер будет не виден, то нужно запустить «Обозреватель» — см. службу

Устанавливаем необходимые библиотеки для PostgreSQL 10
Примечание: полную инструкцию лучше смотреть на сайте https://github.com/tds-fdw/tds_fdw.git
- sudo apt-get install freetds-dev freetds-common
Далее собираем расширение:
git clone https://github.com/tds-fdw/tds_fdw.git cd tds_fdw make USE_PGXS=1 installЧитать далее «Интеграция PostgreSQL с MS SQL Server»
Сбор статистики по БД PostgreSQL
SELECT xact_commit, now(), numbackends FROM pg_stat_database WHERE datname = 'mydb';
- xact_commit — количество транзакций
- numbackends — количество подключений к БД
Координаты в базе данных PostgreSQL
Для работы с координатами в бд «Mobnius» необходимо скачать и установить пакет postgis.
sudo apt-get install postgis
Инструкция по установке находится здесь.
sudo -u postgres psql mobnius
mobnius=# CREATE EXTENSION postgis;
Далее необходимо перейти в базу данных и установить расширение postgis, в поле «schema» указать «public»
Координаты в бд «Mobnius» используются в следующих таблицах:
- ad_tracking;
- cd_files;
- cd_points.