Обновление массива jsonb в PostgreSQL

create or replace function update_array_elements(arr jsonb, key text, value jsonb)
returns jsonb language sql as $$
    select jsonb_agg(jsonb_build_object(k, case when k <> key then v else value end))
    from jsonb_array_elements(arr) e(e), 
    lateral jsonb_each(e) p(k, v)
$$;
select update_array_elements('[{"bar":true},{"bar":true}]'::jsonb, 'bar', 'false');

      update_array_elements
----------------------------------
 [{"bar": false}, {"bar": false}]
(1 row)

Краткая справка по работе с docker

Основано на видеоуроках с youtube.

Запуск контейнера

docker run -d -p 80:80 docker/getting-started
  • -d — работа в фоне (не блокируется terminal)
  • -p 80:80 привязка портов (проброс)

Просмотр образов

docket images
REPOSITORY               TAG       IMAGE ID       CREATED        SIZE
docker/getting-started   latest    3e4394f6b72f   2 months ago   47MB
Читать далее «Краткая справка по работе с docker»

Reshaping Pandas Data frames with Melt & Pivot

import pandas as pd

df = pd.DataFrame(data = {
    'Day' : ['MON', 'TUE', 'WED', 'THU', 'FRI'], 
    'Google' : [1129,1132,1134,1152,1152], 
    'Apple' : [191,192,190,190,188] 
})

reshaped_df = df.melt(id_vars=['Day'], var_name='Company', value_name='Closing Price')

reshaped_df.head()

Unmelt/Reverse Melt/Pivot

original_df = reshaped_df.pivot(index='Day', columns='Company')['Closing Price'].reset_index()
original_df.columns.name = None

original_df.head()

Оригинал статьи: https://www.freblogg.com/pandas-melt-pivot

Использование cudf в jupyter notebook

Устанавливаем cudа на WSL2 по инструкции.

  • Проверяем, что установлены поcледние драйверы Nvidia, если нужно обновить, то ставить с официального сайта https://www.nvidia.com/Download/index.aspx
  • Проверяем последнюю версию wsl
wsl.exe --update
  • Ставим cuda
sudo apt-key del 7fa2af80

wget https://developer.download.nvidia.com/compute/cuda/repos/wsl-ubuntu/x86_64/cuda-wsl-ubuntu.pin
sudo mv cuda-wsl-ubuntu.pin /etc/apt/preferences.d/cuda-repository-pin-600
wget https://developer.download.nvidia.com/compute/cuda/12.0.0/local_installers/cuda-repo-wsl-ubuntu-12-0-local_12.0.0-1_amd64.deb
sudo dpkg -i cuda-repo-wsl-ubuntu-12-0-local_12.0.0-1_amd64.deb
sudo cp /var/cuda-repo-wsl-ubuntu-12-0-local/cuda-*-keyring.gpg /usr/share/keyrings/
sudo apt-get update
sudo apt-get -y install cuda
Читать далее «Использование cudf в jupyter notebook»

Чтение файлов из PostgreSQL

Примечание: данный способ не идеален, так как может быть создавать «дыру» в безопасности

Для чтения данных из файловой системы в postgresql требуется сохранить изображения в каталоге:

# psql
SHOW data_directory;

# /var/lib/postgresql/12/main
Читать далее «Чтение файлов из PostgreSQL»

plv8 и PostgreSQL 14

По умолчанию поддержка в 14 версии отсутствует (на момент написания статьи).

Чтобы установить расширение требуется выполнить следующие шаги:

Шаг 1. Ставим зависимости

sudo apt install make git g++ clang python2 pkg-config libc++-dev libc++abi-dev libglib2.0-dev libtinfo5 ninja-build postgresql-server-dev-14

Шаг 2. Указываем, что команда python вызывает python версии 2

sudo ln -s /usr/bin/python2 /usr/bin/python
Версия python
Читать далее «plv8 и PostgreSQL 14»

Скрипт резервного копирования СУБД PostgreSQL

Резервное копирование производиться при помощи утилиты pg_probackup

sudo sh -c 'echo "deb [arch=amd64] https://repo.postgrespro.ru/pg_probackup/deb/ $(lsb_release -cs) main-$(lsb_release -cs)" > /etc/apt/sources.list.d/pg_probackup.list'
sudo wget -O - https://repo.postgrespro.ru/pg_probackup/keys/GPG-KEY-PG_PROBACKUP | sudo apt-key add - && sudo apt-get update
sudo apt-get install pg-probackup-12
sudo apt-get install pg-probackup-12-dbg

Примечание: на примере выше устанавливается 12 версия

Далее делаем символьную ссылку:

sudo ln -s /usr/bin/pg_probackup-12 /usr/bin/pg_probackup
Читать далее «Скрипт резервного копирования СУБД PostgreSQL»

Подключение к ADB через Wi-Fi (через TCP)

ADB умеет подключаться к устройствам не только через USB, но и через TCP. Порой, это бывает весьма полезным.

1. Подключаем устройство через USB, а в консоль вводим команду adb tcpip 5555. В ответ будет выведена фраза «restarting in TCP mode port: 5555».
2. Отключаем устройство от USB, в консоль вводим команду adb connect <ip>:<port>, где <ip> — это адрес устройства, а <port>  в нашем случае — 5555. В ответ должна появится фраза «connected to 192.168.1.10:5555».

Во многих случаях достаточно выполнить лишь пункт 2 (т.е. бе предварительного подключения устройства по USB).

Проверяем, что устройство видно:

# adb devices
List of devices attached
192.168.1.10:5555 device

Соединение по TCP автоматически завершится в тот момент, когда вы подключите это устройство через USB. Также можно вручную указать ADB слушать только USB:

# adb usb