Получить список индексов
https://www.mongodb.com/docs/manual/reference/command/listIndexes/
Изменить TTL у существующего индекса
https://www.mongodb.com/docs/manual/core/index-ttl/#std-label-change-ttl-expireafterseconds-value
Получить список индексов
https://www.mongodb.com/docs/manual/reference/command/listIndexes/
Изменить TTL у существующего индекса
https://www.mongodb.com/docs/manual/core/index-ttl/#std-label-change-ttl-expireafterseconds-value
Конвертирование сертификатов (PEM/P7B/PFX/DER)
Форматы сертификатов можно менять при помощи команд OpenSSL или посредством инструментов Конвертор SSL. Ниже указаны наиболее употребляемые комманды:
I. Конвертирование файлов PEM
PEM в DER
openssl x509 -outform der -in certificate.pem -out certificate.der
PEM в P7B
openssl crl2pkcs7 -nocrl -certfile certificate.cer -out certificate.p7b -certfile CACert.cer
PEM в PFX
openssl pkcs12 -export -out certificate.pfx -inkey privateKey.key -in certificate.crt -certfile CACert.crt
II. Конвертирование файлов P7B
P7B в PEM
openssl pkcs7 -print_certs -in certificate.p7b -out certificate.cer
P7B в PFX
openssl pkcs7 -print_certs -in certificate.p7b -out certificate.cer openssl pkcs12 -export -in certificate.cer -inkey privateKey.key -out certificate.pfx -certfile CACert.cer
III. Конвертирование файлов PFX
PFX в PEM
openssl pkcs12 -in certificate.pfx -out certificate.cer -nodes
IV. Конвертирование файлов DER
DER в PEM
openssl x509 -inform der -in certificate.cer -out certificate.pem
Установка Postfix
Установка и настройка SMTP-сервера исходящей почты Postfix в Ubuntu 18.04
Настройка dkim
https://serveroid.com/ru/kb/dkim-spf-postfix.html
Настройка dmarc
https://www.unisender.com/ru/glossary/dmarc/
Проверка корректности настройки почты
https://mxtoolbox.com/emailhealth/
1 2 |
RX packets:30156252 errors:0 dropped:0 overruns:0 frame:0 TX packets:15504945 errors:0 dropped:0 overruns:0 carrier:0 |
T — Trancieve (отправление)
R — Recieve (получение)
ТОП 30 по занимаемому месту объектов в БД
1 2 |
SELECT relname AS "table_name", pg_size_pretty((relpages::bigint*8*1024)) AS "size" FROM pg_class ORDER BY relpages DESC LIMIT 30; |
Как узнать размер таблицы в базе данных PostgreSQL?
1 |
SELECT pg_size_pretty( pg_total_relation_size( 'tablename' ) ); |
Результатом будет размер таблицы tablename, включая индексы.
Как узнать размер таблицы в базе данных PostgreSQL без учёта индексов?
1 |
SELECT pg_size_pretty( pg_relation_size( 'tablename' ) ); |
Давно уже не пользуюсь Apache но переодически беру на фрилансе заказы. Была задача сделать обыденность — для СЕО сделать редирект всех ссылок www.domain.ru/* на domain.ru/*
Если по простому — то как-то так:
Если на сайте HTTP
1 2 3 4 |
RewriteEngine On RewriteBase / RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC] RewriteRule ^(.*)$ http://%1/$1 [R=301,L] |
Если на сайте HTTPS
1 2 3 4 |
RewriteEngine On RewriteBase / RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC] RewriteRule ^(.*)$ https://%1/$1 [R=301,L] |
Была у меня задача подключить внешний PHP код, но открыть к нему доступ только для пользователей с ролью Администратор. Через routes это было не сделать.
Помог следующий код в файле конфиге внешнего PHP кода который инклудился во всех файлах:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<?php require '/path/to/laravel/bootstrap/autoload.php'; $app = require_once '/path/to/laravel/bootstrap/start.php'; $request = $app['request']; $client = (new \Stack\Builder) ->push('Illuminate\Cookie\Guard', $app['encrypter']) ->push('Illuminate\Cookie\Queue', $app['cookie']) ->push('Illuminate\Session\Middleware', $app['session'], null); $stack = $client->resolve($app); $stack->handle($request); $isAuthorized = Auth::check(); //Тут можно уже делать проверки на наличие авторизации, роли и прочее - т.к. сессия подхватиться если есть |
Тоже самое для Laravel 5
1 2 3 4 5 6 7 8 9 |
<?php require '/path/to/laravel/bootstrap/autoload.php'; $app = require_once '/path/to/laravel/bootstrap/app.php'; $app->make('Illuminate\Contracts\Http\Kernel') ->handle(Illuminate\Http\Request::capture()); $isAuthorized = Auth::check(); |
Долго искал как это можно было сделать, нашёл в итоге это решение на гитхабе: https://gist.github.com/frzsombor/ddd0e11f93885060ef35
Собрал для себя запросы которые мне были нужны в то или иное время — источник — интернет.
Аналог GROUP_CONCAT
1 2 3 4 5 6 7 |
SELECT id_field, array_agg(value_field1), array_agg(value_field1 || ':' || value_field2), array_to_string(array_agg(value_field1 || ':' || value_field2), ';') FROM data_table GROUP BY id_field |
Удаление миллисекунд у now()
1 2 3 4 5 |
SELECT now(); 2015-06-08 15:08:46.242742+03 SELECT now()::timestamp(0); 2015-06-08 15:08:46 |
Статистика по индексам
Список по индексам: сколько записей из индекса были возвращены в запросах по этому индексу; сколько рядов при этом все же пришлось просматривать в родительской таблице; отношение этих двух чисел. Суть данной статистики проста: если у вас много fetch-ей, значит индекс устарел и при выполнении запроса PostgreSQL вынужден смотреть непосредственно в таблицу, как в источник самых актуальных данных, что замедляет его работу. В этом случае необходимо перестроить данный индекс, чтобы он соответствовал реальным данным в таблице.
1 2 3 4 5 6 7 8 9 10 11 12 |
SELECT indexrelname, idx_tup_read, idx_tup_fetch, CASE WHEN idx_tup_fetch = 0 THEN 100 ELSE idx_tup_read / idx_tup_fetch END AS ratio FROM pg_stat_user_indexes ORDER BY ratio DESC; |
Список текущих блокировок
Список текущих блокировок с указанием типа блокировки, таблицы и базы данных, на которой она выставлена и номера транзакции, которая выставила блокировку. Не стоит пугаться, если запрос выдает длинный список lock-ов — не все они являются критическими и блокирующими таблицу от всех возможных изменений и даже чтения. Для анализа списка блокировок обязательно стоит ознакомиться с документацией об их типах в PostgreSQL и о том, когда и какими запросами они выставляются. Один из распространенных случаев, когда список блокировок может пригодиться: выполняя команду ps aux | grep ^postgres вы видите, что в статусе одного из процессов postgres-а написано waiting — это как раз и означает, что данный процесс ждет, когда будет снята нужная ему блокировка. Какая именно — выясняйте, запустив данный запрос.
1 2 3 4 5 6 7 8 9 10 |
SELECT l.mode, d.datname, c.relname, l.granted, l.transactionid FROM pg_locks AS l LEFT JOIN pg_database AS d ON l.database= d.oid LEFT JOIN pg_class AS c ON l.relation = c.oid; |
Выполняющиеся запросы с их продолжительностью
Простой список выполняющихся сервером в настоящий момент запросов. Бывает полезен, когда вы недостаточно хорошо знаете систему или просто не успели ее настроить — с его помощью можно найти и прервать «плохой» запрос, который мешает работе сервера (колонка procpid содержит PID процесса, которому можно сделать kill при необходимости).
1 2 3 4 5 6 7 8 |
SELECT datname, pid, NOW() - query_start AS duration, query FROM pg_stat_activity ORDER BY duration DESC; |