console.log() неправильно работает? Клиентский console.log() не сильно отличается от серверного. Иногда в логах можно получить неожиданные результаты: console.log('%data%', []) NaNata% Обратите внимание, мы передали два параметра в метод log(). Мы хотели вывести сначала строку, а потом массив. Но вместо вывода двух элементов мы получили одну странную строку на выходе. Что […]
У нас есть NodeJS сервер, с которого мы отправляем запросы на разные сайты сети интернет. Мы получаем полезные данные и публикуем аналитику. В некоторых задачах мы хотим собирать IP-адреса, на которых располагаются ресурсы тех или иных сайтов. Работа с системой доменных имён В NodeJS есть модуль, который отвечает за […]
SQL-запрос на переворот массива и получение первого элемента SELECT (SELECT ARRAY(SELECT array_item FROM unnest(ARRAY[1, 2, 3, 4, 5]) WITH ORDINALITY AS t(array_item, position) ORDER BY position DESC))[1]; Жирным красным шрифтом выделено место, куда ты должен подставить свой массив. Напоминаю, что индексы элементов массивов в PostgreSQL начинаются с единицы (1), а […]
Как узнать общее количество записей в какой-то таблице в PostgreSQL через агрегатную функцию count()? SELECT count(*) FROM a.t_d; Результат работы выражения: Мы используем команду SELECT, для того, чтобы получить какой-то результат. После команды мы указываем агрегатную функцию count() внутрь которой передаём символ звёздочки. Смысл функции — подсчитывать общее количество записей. […]
Есть набор символов, которые лежат в массиве: let myarr = ['а','б','в','г','д','е','ё','ж']; Нам нужно создать такую функцию при помощи JavaScript, чтобы она могла принимать этот набор символов и нужную длину слова. На выходе функция должна возвращать случайное слово. Решение задачи Нам нужна внутренняя функция, которая будет возвращать из передаваемого массива […]
Зачем переписывать детей HTML-элемента в DOM? Речь идёт о перемене мест детей между друг другом или полная их замена. У нас есть какой-то HTML-элемент на странице в браузере. У этого элемента есть несколько детей одного типа. Для простоты восприятия, представьте себе таблицу у которой есть столбцы и записи. Так вот, […]
Список плохих сайтов от 2023-01-19 «Плохие» сайты это какие? Собирая адреса сайтов из интернета, первым делом сталкиваешься с неожиданными ситуациями, когда на доменах второго уровня висят десятки тысяч доменов третьего. Сначала думаешь, что информация на них чем-то отличается, но прокликав пару десятков из них, понимаешь, что контент перетасовывается в […]
Как сделать SQL-дамп данных одного столбца таблицы PostgreSQL на ПК в отдельный файл? У нас есть таблица с несколькими столбцами и несколькими записями. Мы хотим сохранить на компьютер данные только из одного столбца этой таблицы, чтобы у нас получился файл с расширением «.sql«. Этот файл нам нужен для хранения наиболее […]
Если не выполняются команды из редактора в веб-интерфейсе pgAdmin 4, то вероятнее всего исчерпаны все свободные подключения клиентов для СУБД PostgreSQL. Куда смотреть? В первую очередь нужно заглянуть на главную панель pgAdmin 4 у нужной базы данных. Раскрываем слева меню напротив нужного сервера. Выбираем нужную базу данных по имени. […]
У нас есть строка: let str = `йц3уке рпар фыв3йцу иа яы1у й1ыс ыв4 аватц` Мы хотим удалить из этой строки символы «й«, «3» и «ц«. Как это сделать? Удаление определённых символов строки через регулярное выражение в JavaScript Мы можем литерально записать наше регулярное выражение и передать его в […]
Работая с данными, в какой-то момент понимаешь, что не всё можно представить в виде линейной информации. Например, если мы говорим о текстах, то это обычные строки JavaScript. Что я имею ввиду? Смысл строк в том, что есть какой-то символ(или символы) и есть какая-то определённая последовательность этих символов. По сути, это […]
По стандарту HTML мы знаем, что в браузере можно рисовать любую графику. За это рисование отвечает HTML-элемент canvas. Для манипулирования с пикселями, текстами, линиями и путями мы используем JavaScript. Холст canvas представляет собой некоторое пиксельное пространство на котором размещаются «контексты рисования». По сути все изображения состоят из разных «контекстов рисования». […]
Что такое массив из массивов? Если смотреть на задачу со стороны визуализации, то массив из массивов представляет собой таблицу со столбцами и записями. Поэтому когда мы хотим перевернуть массив из массивов на девяносто градусов, то фактически мы хотим наклонить таблицу в правую или левую сторону — повернуть по часовой стрелке […]
Мы работаем с HTML-страницей в браузере и хотели бы в HTML-элементе «canvas» нарисовать красную линию, которая расположена диагонально относительно самого блока холста. Как это сделать? Для создания объектов мы используем язык JavaScript и интерфейсы объектной модели документа DOM. Пример HTML-файла с JavaScript кодом, который рисует красную диагональную линию на […]
Как найти пересечение между двумя массивами JavaScript? У нас есть два массива с уникальными наборами чисел: let arr1 = [1,2,3,4,5,6]; let arr2 = [4,5,6,7,8,9]; В каждом массиве число встречается ровно 1 раз. Мы хотим получить такие числа, которые есть и в первом массиве и во втором. Как это сделать? […]
Как вызывать функцию, в теле которой есть ключевое слово this, в контексте какого-то объекта? Обычно функции, которые используют ключевое слово this можно встретить при создании класса в JavaScript. Это распространённая практика. При описании класса просто невозможно не использовать this. Классы для того и создают, чтобы из них рождались какие-то объекты. […]
Введите то, что хотите отрезать спереди у списка строк Введите список строк в которых нужно отрезать от начала Итоговый результат обрезания строк Как удалить лишние символы из начал строк онлайн? В самое верхнее поле скопируй то, что тебе нужно отрезать от начал всех строк. В среднее поле скопируй то, что […]
Когда мы говорим о HTML в контексте JavaScript, то подразумеваем объекты, которые описывают HTML-элементы. Такое описание называется объектной моделью документа — DOM (Document Object Model). Когда мы говорим о CSS в контексте JavaScript, то подразумеваем объекты, которые описывают CSS-таблицы. Такое описание называется объектной моделью каскадных таблиц стилей — CSSOM (Cascading […]
У нас есть простой документ со скриптом, в котором мы создали HTML-элемент textarea силами JavaScript: <script> let te = document.createElement(‘textarea’); te.setAttribute(‘id’, ‘te’); let h1 = document.getElementsByTagName(‘h1’)[0]; h1.after(te); </script> Созданный […]
Атрибуты содержимого Элемент может иметь все глобальные атрибуты. Элемент может иметь собственные атрибуты: autocomplete — Подсказка для функции автозаполнения формы cols — Максимальное количество символов в строке dirname — Имя элемента управления формы, используемого для отправки направления элемента при отправке формы disabled — Отключено ли управление формой form — Связывает […]
Скрипт создания HTML-элемента textarea и добавление его в текущий документ после заголовка h1 <script> let te = document.createElement(‘textarea’); te.setAttribute(‘id’, ‘te’); let h1 = document.getElementsByTagName(‘h1’)[0]; h1.after(te); </script> Сначала мы обращаемся […]
Есть два объекта: let obj1 = {a:1}; let obj2 = {}; Мы хотим проверить эти объекты на пустоту. Как это сделать? Как проверить, что объект пустой и у него нет свойств? Под словом «пустой» мы подразумеваем такой объект, в котором нет ключей и значений — то есть нет свойств. […]
2.6.2.1 Интерфейс HTMLAllCollection 3.1.4 Отчёт о статусе загрузки документа 4.8.5 Элемент iframe 4.10.11 Элемент textarea 4.12.5 Элемент canvas 4.12.5.1.1 Замечания по реализации 4.12.5.1.2 Состояние холста 4.12.5.1.3 Стили линий 4.12.5.1.4 Стили текста 4.12.5.1.5 Строительные пути 4.12.5.1.11 Нанесение текста на растровое изображение 4.12.5.1.15 Манипуляции с пикселями 4.12.5.1.17 Сглаживание изображения […]
Когда браузер получает строку с HTML-разметкой с сервера, тогда он пытается построить объектную модель документа — «DOM«. Нетрудно догадаться, что этот процесс будет занимать некоторое время. Чем больше HTML-разметка и чем глубже вложенность HTML-элементов друг в друга, тем дольше браузер будет строить объект DOM-документа. На задержку также влияет количество подключаемых скриптов […]
Экземпляры String — это экзотические объекты String, для которых заданы внутренние методы. Экземпляры String наследуют свойства от объекта-прототипа String. У экземпляров String также есть внутренний слот [[StringData]]. Экземпляры String имеют свойство «length» и набор перечислимых свойств с именами, индексируемыми целыми числами. Получение длины строки в JavaScript Так как в […]
SQL-команда примерно такая: -- в байтах SELECT sum(pg_column_size(id)) FROM a.t_d; -- или в человеко-понятном формате SELECT pg_size_pretty(sum(pg_column_size(id))) FROM a.t_d; Мы используем встроенную функцию pg_column_size(), которая показывает нам размер занимаемой ячейки таблицы. Мы обходим каждую запись таблицы и вычисляем размеры ячеек. Применив агрегатную функцию sum(), мы можем просуммировать все значения размеров […]
Пример SQL-запроса, который вернёт следующую актуальную запись для идентификатора 4000000: SELECT id FROM t_scheme.t_name WHERE id > 4000000 ORDER BY id ASC LIMIT 1; или SELECT * FROM t_scheme.t_name WHERE id > 4000000 ORDER BY id ASC LIMIT 1; Логика подробно описана в похожей по смыслу публикации — PostgreSQL | […]
Как получить предыдущую запись таблицы по предполагаемому первичному ключу? Суть проблемы заключается в том, что при использовании генераторов последовательностей SEQUENCE, можно получать «дырки» в первичных ключах. Это происходит потому, что каждая большая база данных имеет свойство обновляться. Может возникать необходимость в удалении записей в таблицах. Стало быть, если запись удаляется, то […]
Посмотрите внимательно на функцию в JavaScript: // Ветвление в блоке try/catch function f(qwe){ try { qwe.replace(‘3’,‘2’) console.log(‘TRY’) return 1 } catch (error) { console.log(‘CATCH’) return […]
Исходная таблица со столбцами Прежде чем проверять существования имён столбцов таблицы, давайте создадим её. -- Тестовая таблица -- DROP TABLE test.t_2022_12_19; CREATE TABLE IF NOT EXISTS test.t_2022_12_19 ( col1 text, col22 text, col333 text, col4444 text ); В веб-интерфейсе pgAdmin4 она выглядит так: Данных в таблице нет. Но они нас […]
Исходная таблица со столбцами Прежде чем получать имена столбцов таблицы, давайте создадим её. -- Тестовая таблица -- DROP TABLE test.t_2022_12_19; CREATE TABLE IF NOT EXISTS test.t_2022_12_19 ( col1 text, col22 text, col333 text, col4444 text ); В веб-интерфейсе pgAdmin4 она выглядит так: Данных в таблице нет. Но они нас не […]
Исходная таблица со столбцами Прежде чем получать имена столбцов таблицы, давайте создадим её. -- Тестовая таблица -- DROP TABLE test.t_2022_12_19; CREATE TABLE IF NOT EXISTS test.t_2022_12_19 ( col1 text, col22 text, col333 text, col4444 text ); В веб-интерфейсе pgAdmin4 она выглядит так: Данных в таблице нет. Но они нас не […]
Есть таблица: -- Тестовая таблица CREATE TABLE IF NOT EXISTS test.t_2022_12_15 ( id bigint NOT NULL GENERATED ALWAYS AS IDENTITY ( INCREMENT 1 START 1 MINVALUE 1 MAXVALUE 9223372036854775807 CACHE 1 ), username text COLLATE pg_catalog."default", randomcode text DEFAULT substr(md5(random()::text), 1, 5), CONSTRAINT t_2022_12_15_id_pkey PRIMARY KEY (id) ); -- Вставляем […]
Приведение текущей временной метки к типу date SELECT CURRENT_TIMESTAMP::DATE; Скриншот результата приведения: Приведение любой временной метки, объявленной литерально, к типу date через двойное двоеточие SELECT '2022-12-05 13:20:05.464379+03'::DATE; Скриншот результата приведения: Приведение любой временной метки, объявленной литерально, к типу date через CAST() SELECT CAST('2022-12-05 13:20:05.464379+03' AS DATE); Скриншот результата […]
Дата может быть оформлена различными типами. Но для извлечения «ГОДА» нужно использовать функцию extract(). SELECT EXTRACT(YEAR FROM '2020-12-17 10:30:00.12742+03'::timestamp); или SELECT EXTRACT(YEAR FROM '2020-12-17'::timestamp); Получим 2020. Смысл в том, что любую дату можно приводить к типу timestamp, а уже потом извлекать год. Информационные ссылки Официальный сайт WEB-оболочки pgAdmin — […]
Оглавление Приведение чисел к логическому типу Boolean Приведение строк к логическому типу Boolean Приведение массивов к логическому типу Boolean Приведение объектов к логическому типу Boolean Приведение undefined к логическому типу Boolean Приведение null к логическому типу Boolean Где автоматически срабатывает приведение к логическому типу Boolean? Приведение чисел к логическому […]
Как обойти таблицу в PostgreSQL при помощи цикла FOR? У нас имеется таблица: -- Тестовая таблица CREATE TABLE IF NOT EXISTS test.t_2022_12_15 ( id bigint NOT NULL GENERATED ALWAYS AS IDENTITY ( INCREMENT 1 START 1 MINVALUE 1 MAXVALUE 9223372036854775807 CACHE 1 ), username text COLLATE pg_catalog."default", randomcode text DEFAULT substr(md5(random()::text), […]
Как обойти массив в PostgreSQL при помощи цикла FOREACH? Через команду DO мы имитируем работу функции, в которой описан простейший цикл по массиву: -- Цикл по массиву DO $$ DECLARE -- Исходный массив arr text[] := '{Лена,Маша,Ян,Петя,Вася}'; -- Переменная для хранения одного элемента массива при обходе циклом x text; BEGIN […]
Команда получения одной случайной буквы русского алфавита из 66 возможных символов в PostgreSQL SELECT (regexp_split_to_array('абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ', ''))[ceil(random()*66)]; Команда получения одной случайной буквы русского алфавита из 33 возможных символов в PostgreSQL SELECT (regexp_split_to_array('абвгдеёжзийклмнопрстуфхцчшщъыьэюя', ''))[ceil(random()*33)]; Информационные ссылки Официальный сайт WEB-оболочки pgAdmin — https://www.pgadmin.org Официальный сайт СУБД PostgreSQL — https://www.postgresql.org Команды SQL […]
Мы хотим получать случайное целое число в диапазоне от нуля до шестидесяти шести в PostgreSQL. Как это сделать? SELECT ceil(random()*66); Функция random() выдаёт случайные значения от 0 (включительно) до 1 (не включая 1). Это значит, что если мы просто умножим это значение на 66, то никогда не получим его ровно. […]
У нас есть строка, в которой последовательно идут 66 букв русского алфавита. 33 символа — строчные. 33 символа — заглавные. Мы хотим разделить эту строку по каждой одной букве и положить эти буквы в массив. Как это сделать в PostgreSQL? Решение Для решения задачи по разделению строки мы воспользуемся […]
RETURNS или RETURNS TABLE без определённого количества полей и типов данных В чём проблема? Когда мы пишем функцию в PostgreSQL, тогда выражения RETURNS или RETURNS TABLE ждут от нас явного количества передаваемых параметров и их типов. Иными словами. Если мы работаем с таблицей, то функция сломается, когда у таблицы появятся […]
У нас есть два набора идентификаторов. Это выглядит как два столбца таблицы. SELECT unnest(ARRAY[1,2,3,4,5,6,7,8,9]); SELECT unnest(ARRAY[5,6,7,8,9,10,11,12,13]); Я называю словом «набор», потому что каждый элемент уникален. Первый столбец с идентификаторами — это тот из которого мы хотим вычесть второй столбец. Мы из первого вычитаем второй. Именно так. Потому что от перемены […]
Какие идентификаторы встречаются в двух столбцах? У нас есть два набора идентификаторов. Это выглядит как два столбца таблицы. SELECT unnest(ARRAY[1,2,3,4,5,6,7,8,9]); SELECT unnest(ARRAY[5,6,7,8,9,10,11,12,13]); Я столбцы называю словом «набор», потому что каждый элемент столбца уникален. Мы хотим найти все возможные пересечения между первым и вторым столбцами. Мы хотим знать какие идентификаторы есть, […]
Как подсчитать количество точек, которые встречаются в строке (тип text) PostgreSQL? Когда мы говорим о строках в любом из языков программирования, то для манипуляции с ними лучше всего использовать «регулярные выражения«. В PostgreSQL есть специальная функция, которая умеет подсчитывать количество повторений символа или символов в строке по принципу регулярных выражений […]
Если ошибка вплывает по причине уникальности, то можно просто ничего не делать с подобной вставкой новой записи и переходить к следующей. Для этого поможет предложение ON CONFLICT DO NOTHING. Ниже пример SQL-запроса на вставку данных: INSERT INTO scheme.table(t_column) SELECT unnest(ARRAY[1,2,3,4,5]) ON CONFLICT DO NOTHING; Информационные ссылки Официальный сайт WEB-оболочки […]
У нас есть дата с типом «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 15:04:06.180197+03'::date + INTERVAL '15D' )::date, '1D')::date; В […]
Для округления дробного числа до сотых, нужно вызвать метод toFixed(), который наследуется всеми объектами Number. Внутрь метода нужно передать один параметр — это число 2. Двойка означает два знака после запятой (в коде после точки). 0.123456.toFixed(2) '0.12' 0.6543.toFixed(2) '0.65' 0.1555.toFixed(2) '0.16' 0.155.toFixed(2) '0.15' Округление может выдавать спорные результаты, поэтому учитывайте […]
Есть NodeJS код, который рассылает HTTP-запросы на разные сайты. Код организован в один класс, с кучей разных методов. Один из методов занимается отправкой HTTP-запроса с учётом полученного объекта из базы данных. Его код примерно такой: send_http_request(obj){ let new_http_request; if (obj.url.match(/^https.*/)){ new_http_request = https.request( obj.url, this.gethttpresponse.bind(this, obj) ) } else { […]
Для получения имени функции нужно обращаться к объекту arguments: function vasya(){ return arguments.callee.name }; Выражение «arguments.callee.name» вернёт нам строку ‘vasya‘. Зачем нужно получать имя функции при её вызове? Предположим у нас имеется функция, которая выполняет полезные действия. function sumABC (a,b,c){ return a […]