Разворачиваем JSONB-массив чисел в таблицу при помощи функции «jsonb_array_elements()«. Через функцию агрегации «array_agg()» собираем числа из столбца таблицы в один SQL-массив. select array_agg(T.i) from (select jsonb_array_elements('[333,555]'::jsonb)::int8) as T(i); Для приведения к числу используем «::int8«.
Если родительский HTML-элемент имеет свойство «display» в значении «flex«, то чтобы растянуть все дочерние блоки по высоте максимального их соседа, нужно воспользоваться свойством «align-items» в значении «stretch«: align-items: stretch; Это свойство применяем на родителе, чтобы указать как будут выравниваться дети.
Для отбора HTML-элементов в браузере при помощи JavaScript можно использовать готовые методы из стандарта объектной модели документа DOM. querySelector(); querySelectorAll(); Оба метода вызываются на HTML-элементе для которого нужно найти потомков. Метод «querySelector()» возвращает самого первого потомка, который соответствует CSS-селектору. Селектор передаётся в виде строки в качестве первого (единственного) параметра. Метод […]
С момента отделения от основной ветки «master«, новая ветка наполняется коммитами. Часто возникает необходимость понять сколько коммитов было опубликовано с момента отделения новой ветки. Нам нужно получить количество созданных коммитов в конкретной именованной ветке разработки. Как это сделать? Находясь в своей ветке разработки нужно выполнить команду: git rev-list --count master.. […]
Команда: git log -5 В чём особенность данный команды? Важно учитывать из какой ветки мы в данный момент обращаемся к команде. Проверить это можно командой: git branch Если мы находимся в отдельной именованной ветке разработки и в ней более или 5 коммитов, то мы увидим последние 5 коммитов для этой […]
Иногда нужно получать более точные значения времени в процессе выполнения функции. Стандартное использование функции «now()» даёт не подходящее значение (только потому, что это значение одинаковое внутри тела функции где бы не вызвали). Для действительно уникальных значений времени (временной метки) нужно использовать функцию «clock_timestamp()«. Она возвращает фактическое текущее время, так что […]
Смысл проблемы в том, что Windows PowerShell слишком нежный и чувствительный для выполнения сценариев. Кому интересно, то можете поиграться с политиками исполнения при помощи команды «Set-ExecutionPolicy unrestricted» для самого PowerShell. И выбрать опцию. Y — Да A — Да для всех N — Нет L — Нет для всех S […]
У нас имеется JSONB-объект: select '{"arrjs": []}'::jsonb; Мы хотим наполнить пустой массив, который хранится под ключом «arrjs«. Будем наполнять простыми объектами. Как это сделать? Для примера будем использовать команду «DO«, чтобы имитировать работу функции. Внутри мы объявим наш объект и наполним его обычным диапазональным циклом в значениях от 0 до […]
Top Menu > SQL Editor > Panels > Show panels in result tabs Как сделать консоль вывода в DBeaver справа? Панель «Вывод» можно перемещать между редактором SQL и результатами с помощью дерева меню: Верхнее меню > Редактор SQL > Панели > Показывать панели на вкладках результатов Нужно отключить чекбокс […]
Через функцию «md5()» и «random()» select md5(random()::text); -- aa44c7d2f833d47102f8e800af754074 Всегда получаем длину строки 32 символа. Есть цифры, есть латинские буквы в нижнем регистре. Функция random() сильно ограничивает количество возможных комбинаций так как по факту в строке остаются только цифры. Количество уникальных значений можно увеличить при помощи конкатенаций вида: select md5(random()::text […]
Ошибка информирует о том, что функция similarity(unknown, unknown) не существует в конкретной базе данных PostgreSQL и возможно в конкретной схеме данных у этой базы данных. Как правило функция «similarity()» принадлежит расширению «pg_trgm«. Скорее всего данное расширение не установлено в вашей базе данных. Но может быть так, что ваш проект использует […]
Команда: CREATE EXTENSION pg_trgm; После исполнения данной команды в текущую базу данных будет загружено новое расширение. Расширение с таким именем не должно быть уже загружено ранее. Если расширение уже будет установлено, тогда мы получим ошибку. Чтобы заменить ошибку на уведомление можно использовать предложение «IF NOT EXISTS»: CREATE EXTENSION IF NOT […]
Нам нужно получить логическое значение при попытке приведения строки SQL к целому числу SQL. Как это сделать? Можно использовать тильду «~» от регулярных выражений в стиле POSIX: select 'qwe' ~ '^[1-9][0-9]*$'; --false select '0000asd' ~ '^[1-9][0-9]*$'; --false select '0000' ~ '^[1-9][0-9]*$'; --false select '0123' ~ '^[1-9][0-9]*$'; --false select '123zxc' ~ […]
Клиентский глобальный объект «window» имеет свойство «crypto«, которое хранит в себе объект — экземпляр класса Crypto. Данный экземпляр наследует от своего прототипа метод «randomUUID()«. Чтобы сгенерировать случайный UUID в виде строки, необходимо выполнить команду: crypto.randomUUID() или window.crypto.randomUUID() За более подробной информацией можно обратиться к документации — «Web Cryptography API«.
Метод «cloneNode()» может принимать в себя один параметр, который именуется как «deep«. Если перевести на наречие русского языка, то этому будет соответствовать слово «вглубь«. Предполагается, что все потомки клонируемого HTML-элемента, будут также склонированы в иерархическом порядке своего оригинала. Пример кода: myDOMelement.cloneNode(true)
Существует несколько способов присваивания значений в свойствах JSONB-объектов в PostgreSQL: Квадратные скобки и строка Функция jsonb_set() Конкатенация с другим JSONB объектом Конкатенация с результатом функции jsonb_build_object() Для примера работы присваивания я буду использовать команду «DO». Визуальный вывод буду делать в журнал при помощи выражения «raise notice». Выполнять запросы буду в […]
Пример получения даты со временем в строковом виде: select to_char(now(), 'YYYY-MM-DD HH24:MI:SS'); Мы используем функцию «to_char()» чтобы произвести преобразование типа «timestamp» в тип «text«. Информационные ссылки Официальный сайт WEB-оболочки pgAdmin — https://www.pgadmin.org Официальный сайт СУБД PostgreSQL — https://www.postgresql.org
Казалось бы такое простое действие, но когда это касается PostgreSQL то сразу всё становится сложно. Тупизна заключается в том, что в отличии от классических массивов в JavaScript, массивы PostgreSQL могут иметь понятие «размерности». Проблема преобразований может выстрелить, когда вы будете писать свои собственные функции, которые на входе будут принимать JSONB […]
Как получить последние 30 дат (более старых) относительно текущей даты в PostgreSQL? Для этого нам нужно воспользоваться встроенной функцией generate_series(), которая может принимать 3 параметра: Начальную дату Конечную дату Интервал (временной шаг) Пример SQL-запроса: SELECT generate_series( current_timestamp - INTERVAL '30D', current_timestamp, '1D' )::date; Данная функция возвращает нам табличный вид с […]
Как вести отдельные логи (журналы) доступа для запросов от автоматизированных систем ботов в nginx? Из документации NGINX нужно знать о существовании двух модулей: Модуль ngx_http_log_module Модуль ngx_http_map_module Первый отвечает за сами файлы логов и стиль наполнения. Второй задаёт правила фильтрации HTTP-запросов, которые должны будут попадать в нужный нам лог. Первый […]
В терминале пользователя серверной операционной системы нужно ввести команду: pm2 start app.js -i max Вместо «app.js» нужно ввести название своего исполняемого процесса приложения NodeJS? В результате такой активации у нас появится возможность запустить один прослушивающий сервер под несколько обработчиков. Например, сервер принимающий HTTP-запросы будет жить на одном IP-адресе и порту, […]
Как сгенерировать даты по диапазону в PostgreSQL? У нас есть дата с типом «timestamp with time zone«: SELECT '2022-12-12 15:04:06.180197+03'; У нас есть интервал: SELECT INTERVAL '15D'; Мы хотим сгенерировать все возможные даты по этим двум компонентам, зная интервал и одну дату. Как это сделать? SELECT generate_series( '2022-12-12 15:04:06.180197+03'::date, ('2022-12-12 […]
Для обновления(перезапуска) вкладки браузера по уже открытому адресу, нужно воспользоваться командой: window.location.reload(); или просто location.reload(); В первом случае мы напрямую обращаемся к глобальному объекту «window». Во втором случае мы обращаемся к свойству «location» у того же глобального объекта — срабатывает относительное обращение.
Способ проверки сегодняшней даты в JavaScript через метод toDateString() При разработке интерфейсов иногда бывает удобно выводить не просто дату в виде числа месяца и года, а дату в виде слова «сегодня«. Для пользователя такая информация может оказаться более удобной, чтобы понимать какие операции выполнились сегодняшним днём. Мы воспользуемся командой получения […]
При перетаскивании HTML элементов div могут возникнуть проблемы с бросанием в область. Иногда может случиться так, что дочерние блоки имеют абсолютное позиционирование относительно своего родителя. В результате суммарная ширина детей может быть больше, чем ширина самого родителя. Также между детьми могут быть пустоты, которые только увеличивают суммарную ширину от края […]
В окне терминала операционной системы Debian нужно ввести команду: php -v или php --version Если среда выполнения PHP кода установлена в Debian, то можно будет увидеть подобную запись: PHP 7.4.33 (cli) (built: Jun 9 2023 16:51:37) ( NTS ) Copyright (c) The PHP Group Zend Engine v3.4.0, Copyright (c) Zend […]
Даже если вы не создавали триггеры в таблицах, то «под капотом» при объявлении ограничений таблицы по внешним ключам они могут создаться автоматически без вашего ведома. Считайте их «служебными триггерами», а не вашими собственными. Проблема тут заключается в том, что если вы использовали технологию каскадного удаления между таблицами, то при переименовании […]
Если в базе данных много функций, то однажды в них будет сложно искать информацию. Речь идёт о составе исходных кодов самих функций. Например, нас может интересовать место (или места) где в функции делается вставка в определённую таблицу или где идёт обновление значений какого-нибудь столбца таблицы. Для поиска по исходным кодам: […]
При работе со строками очень часто нужно находить что-то в строке в разных местах и перемешивать это в каком-то другом порядке. Порядок элементов не всегда может быть последовательный и отделённый друг от друга. Часть строки может по смыслу попадать в две и более секции. Из-за обилия круглых скобок в шаблоне […]
В PostgreSQL интервалы можно умножать на целые числа при помощи обычного символа звёздочки. select 5 * '1 minute'::interval; Сначала нам нужно получить интервал одной минуты. Для этого мы создаём строку ‘1 minute’ и приводим её к типу interval. После этого мы можем умножать наше целое число на наш интервал одной […]
Иногда нужно не просто считать сумму всех элементов столбца, а считать с приращением следующего и предыдущего значения суммирования. Это из категории задач на смещение значений. Представьте, что у вас есть последовательность чисел 1, 2, 5, 10. Их общая сумма будет равна 18. Но сумма с приращением будет выглядеть иначе = ( […]
Сколько дочерних таблиц создано у родительской таблицы в PostgreSQL? select count(*) from pg_inherits where inhparent = (select oid from pg_class where relname = 't_all_dp'); Сначала нам нужно получить OID нашей родительской таблицы из представления «pg_class«. Имя нашей таблицы хранится в столбце «relname«. Затем в представлении «pg_inherits» мы отбираем все записи, […]
Как узнать ведётся ли журнал действий над таблицей в PostgreSQL или нет? При переносе больших данных из одной таблицы в другую, для ускорения процесса обычно отключают ведение журнала для новой таблицы. Для отключения логирования используется команда: ALTER TABLE a.t_clients SET UNLOGGED; После переноса данных нужно вручную включить логирование на новой […]
При переносе данных из таблицы в таблицу или при переводе таблицы в секционированную из обычной, возникает потребность в изменении последнего созданного значения для новой последовательности (SEQUENCE) если она участвовала в генерации целочисленных идентификаторов первичных ключей. alter sequence a.mytable_new_seq restart with 500228059; После этого можно будет увидеть сделанные изменения select * […]
Возможны две наиболее вероятные ситуации, когда точно нужно делать VACUUM FULL в PostgreSQL: Мы сильно меняем данные в таблицах и делаем много удалений (операций DELETE). Сотнями тысяч в сутки, и даже более. При этом место на диске не освободилось для операционной системы. Запросы начинают замедляться. Таблицы засоряются старыми ненужными страницами, […]
Именно таким поисковым запросом хочется описать суть проблемы с очисткой таблицы, для полного освобождения пустых и уже ненужных страниц данных для операционной системы. VACUUM FULL ВСЕГДА БЛОКИРУЕТ ТАБЛИЦУ ДАЖЕ ДЛЯ ЧТЕНИЯ (актуально на осень 2023)! Но проблему можно решить зайдя с другой стороны. Какие предпосылки у такого рода запроса? […]
Перенос данных между таблицами может иметь продолжительный период. Например если таблица весит пару сотен гигабайт, а хранилище работает на HDD дисках и эти диски читают другие приложения. В результате будет разумным перенести сначала более ценные записи таблицы, а уже потом все остальные. Под ценными данными каждый будет понимать что-то своё. Но […]
Часто на сайте нужно что-то подсветить или разукрасить. А иногда, для удобства восприятия человеком, нужно чередовать тематически схожие элементы. Например когда нужно цветами чередовать записи в HTML-таблице. Но нюанс заключается именно в том, что чередование происходит не между отдельными записями таблицы, а между группами записей под какое-то определённое условие. Пример […]
Как экранировать «остаток от деления» — символ процента? В коде для PostgreSQL можно увидеть последовательно два символа процента «%%«. Мы понимаем, что это может быть обычная строка с типом text или даже шаблон регулярного выражения. Но! Всё меняется, когда нам необходимо выполнить динамическую команду PostgreSQL с использованием оператора «остаток от деления», […]
PostgreSQL даёт возможность узнать дату последнего запуска «процесса автоматической очистки таблицы» (autovacuum) в базе данных. Для этого нужно обратиться к системному представлению, которое называется «pg_stat_user_tables«. В нём нас интересует столбец «last_autovacuum«. Для идентификации нужной таблицы нам понадобятся схема (столбец «schemaname«) и имя таблицы в этой схеме (столбец «relname«). Запрос будет […]
Чтобы не натыкаться на возможные разновидности значений в столбцах, которые может использовать OVER нужно написать «OVER()«. Просто слово «OVER» и две круглые скобки после него «()«. В таком виде PostgreSQL будет проставлять нужный результат агрегирующей функции для всех записей (строк таблицы/строк запроса) с учётом какого-либо столбца. -- Пример таблицы № […]
Как узнать какая клавиша (кнопка) на клавиатуре была нажата на HTML-странице при помощи JavaScript? Само слово ‘keydown‘ обозначает именно нажатие. То есть событие на клиенте (в браузере) срабатывает в тот момент, когда фактически клавиша клавиатуры опустилась вниз. При этом если держать клавишу и не отпускать, то событие будет срабатывать с […]
ERROR: ОШИБКА: в элементе предложения FROM неверная ссылка на таблицу Когда пытаешься соединять различные таблицы в одну большую и информативную, то при работе с JOIN можно получить ошибку вида: ERROR: ОШИБКА: в элементе предложения FROM неверная ссылка на таблицу "rz" LINE 2: JOIN (SELECT * FROM a.t_d WHERE r = […]
Свойство «grid-template-columns» указывает список дорожек для столбцов сетки, а свойство «grid-template-rows» указывает список дорожек для строк сетки. Эти свойства определяют в виде списка дорожек, разделенных пробелами, имена линий и функции определения размеров дорожек сетки. Свойство «grid-template-columns» в родительском блоке отвечает за то, сколько столбцов должно быть в сетке на HTML-странице. Если […]
Как в PostgreSQL запретить любое обновление всех существующих ячеек определённого столбца таблицы? Возможно только удаление записи с ячейкой. В PostgreSQL по умолчанию при создании таблицы предусматривается возможность изменения (UPDATE) любых данных, на которые не наложены какие-либо ограничения. Есть базовые ограничения первичного ключа или внешнего ключа. Также из популярных может быть […]
Есть массив из чисел на 11 элементов: let arr = [1,2,3,4,5,6,7,8,9,10,11]; Мы хотим получить массив из массивов, так, чтобы вложенные массивы хранили в себе по три элемента оригинального массива, начиная с начала. Если элементов недостаточно в конце массива, то всё равно добавляем те что есть, в пределах до 3 штук. […]
Нам нужно получить строку даты и времени, где время представлено только часами и минутами — без секунд. Как это сделать? Создадим объект Даты (Date) в JavaScript, чтобы было от чего отталкиваться: let d = new Date() Теперь мы можем получить полную строку временной метки в виде строки: d.toLocaleString() '21.07.2023, 10:46:22' […]
Как вынести отдельно из методов then() или catch() функцию обработки отклонённого обещания (Promise Rejected) с поддержкой передачи нужного количества параметров при помощи bind()? Что нужно запомнить? Метод bind() всегда принимает первым параметром объект, в контексте которого будет вызвана функция. Если мы просто указываем ссылку на функцию в методах then() или […]
NULL-значения, которые база данных отдаёт на клиент могут не представлять никакой ценности для конечного пользователя. В большинстве случаев от них нужно избавляться. Если выбирать данные из таблиц с включением NULL-значений, тогда в остальной части приложения нужно будет делать эти проверки «на NULL» и производить подмены на что-то более внятное и […]
Файл «app.js« var button1 = Ext.create('Ext.Button', { title: 'button1 title', //html: 'button1 html', text: 'btn1txt', width: 100, height: 50 }); var button2 = Ext.create('Ext.Button', { title: 'button2 title', //html: 'button2 html', text: 'btn2txt', width: 100, height: 50 }); var button3 = Ext.create('Ext.Button', { title: 'button3 title', //html: 'button3 html', text: […]