Задача
Необходимо найти долговыполняющиеся запросы к базе данных.
Решение
Необходимо включить вывод в лог запросов, длительность которых больше заданной длительности.
Читать далее «Поиск медленных запросов»Рассказываю сложные вещи простыми словами
Необходимо найти долговыполняющиеся запросы к базе данных.
Необходимо включить вывод в лог запросов, длительность которых больше заданной длительности.
Читать далее «Поиск медленных запросов»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.
VACUUM [tablename]
/* Before Postgres 9.0: */ VACUUM FULL /* Postgres 9.0+: */ VACUUM(FULL) [tablename]
/* Before Postgres 9.0: */ VACUUM FULL ANALYZE [tablename] /* Postgres 9.0+: */ VACUUM(FULL, ANALYZE) [tablename]
/* Before Postgres 9.0: */ VACUUM FULL VERBOSE ANALYZE [tablename] /* Postgres 9.0+: */ VACUUM(FULL, ANALYZE, VERBOSE) [tablename]Читать далее «Обслуживание PostgreSql»
sudo apt-get --purge remove postgresql
dpkg -l | grep postgres
sudo apt-get --purge remove postgresql postgresql-doc postgresql-client-common
https://askubuntu.com/questions/32730/how-to-remove-postgres-from-my-installation
Подключаемся под postgres
sudo su - postgres
Ставим приложение 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
Работая с 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;
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 postgres_fdw;
CREATE SERVER server_name FOREIGN DATA WRAPPER postgres_fdw OPTIONS (host 'host_ip', dbname 'db_name', port 'port_number');
CREATE USER MAPPING FOR CURRENT_USER SERVER server_name OPTIONS (user 'user_name', password 'password');
CREATE SCHEMA schema_name;
IMPORT FOREIGN SCHEMA schema_name_to_import_from_remote_db FROM SERVER server_name INTO schema_name;
SELECT * FROM schema_name.table_name;
This can be used to access multiple schema of remote DB.