Обслуживание PostgreSql

Examples

In the examples below, [tablename] is optional. Without a table specified, VACUUM will be run on available tables in the current schema that the user has access to.

  1. Plain VACUUM: Frees up space for re-use
VACUUM [tablename]
  1. Full VACUUM: Locks the database table, and reclaims more space than a plain VACUUM
/* Before Postgres 9.0: */ 
VACUUM FULL 
/* Postgres 9.0+: */ 
VACUUM(FULL) [tablename]
  1. Full VACUUM and ANALYZE: Performs a Full VACUUM and gathers new statistics on query executions paths using ANALYZE
/* Before Postgres 9.0: */ 
VACUUM FULL ANALYZE [tablename] 
/* Postgres 9.0+: */ 
VACUUM(FULL, ANALYZE) [tablename]
  1. Verbose Full VACUUM and ANALYZE: Same as #3, but with verbose progress output
/* Before Postgres 9.0: */ 
VACUUM FULL VERBOSE ANALYZE [tablename] 
/* Postgres 9.0+: */ 
VACUUM(FULL, ANALYZE, VERBOSE) [tablename]
Читать далее «Обслуживание PostgreSql»

Работа с часовыми поясами

Все сервера должны быть в одном часовом поясе и настроить их можно по инструкциям ниже:

Далее в nodejs нужно добавить код для преобразования даты:

var moment = require('moment');
...
Date.prototype.toJSON = function () { return moment(this).format('YYYY-MM-DDTHH:mm:ss.SSSZZ'); }

Autodoc для postgresql

Ставим приложение 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

Обновление строки в postgresql

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

Прототип android-приложения с функцией обновления

Приложение UpdateApplication представляет из себя одноэкранное приложение интерфейс которого состоит из элементов  Button(кнопка) и TextView (тектовое поле).

Стартовый экран

Для корректной работы приложения необходимо добавить следующие разрешения в файл манифеста:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/>
Читать далее «Прототип android-приложения с функцией обновления»

Заметка: работа с JSON в postgresql

Работая с 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;

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

Postgresql вывод информации в «консоль»

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;