// create query to match input with the description or product name
var query = em.createQuery("SELECT p FROM Product p WHERE LOWER(p.description) like OR lower(p.productName) like :input", Product.class);
Это качественный и безопасный запрос с именованными параметрами, что делает невозможным использование инъекций.
// create query to match input with the description or product name
String query = "Select * from Product where lower(description) like '%" + lowerInput + "%' OR lower(product_name) like '%" + lowerInput + "%'";
Для контекста нейросеть использовала уязвимый код и на его основе сгенерировала ещё одну ошибку.
Факторы, усугубляющие использование GitHub Copilot:
— Закрепление плохого подхода. Начинающие разработчики, использующие ИИ-помощников, не замечают своих ошибок и начинают думать, что если код сгенерировала нейросеть, то он верный.
— Отсутствие проверок. Ассистенты не могут проверять безопасность предложенных фрагментов, а разработчики редко пересматривают их. Это увеличивает количество уязвимостей в проекте.
— Устаревшие шаблоны. GitHub Copilot может предлагать фрагменты, которые в сообществе уже признаны неверными и содержащими ошибки.
Будьте аккуратнее, в общем)
@sqlhub
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14❤3🔥1
This media is not supported in your browser
VIEW IN TELEGRAM
Очевидно, что это будет первая, либо последняя запись в этом столбце.
База данных Oracle знает об этом, поэтому может оптимизировать данный запрос:
INDEX FULL SCAN (MIN/MAX)
или
INDEX RANGE SCAN (MIN/MAX)
При этом запросе считывается только одна необходимая запись.
@sqlhub
Please open Telegram to view this post
VIEW IN TELEGRAM
❤7👍4🥰2🔥1
Нереально полезная подборка SQL-запросов, количество запросов вы и сами видите, это покрывает большую часть того, что может встретиться в практике
В том числе здесь:
record
и NULL
и способы быстрого получения количества записей в большой таблицеUPSERT
) и журналирование изменений таблицыDDL
) и способы добавления ограничений таблицы и изменения ограничений внешнего ключа без блокирования таблицы@sqlhub
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥31👍8❤4
sudo -u postgres psql -d dbname -c "SELECT * FROM table;"
Здесь
dbname
— это название вашей БД, table
– имя таблицы. Разумеется, используем права суперпользователя
sudo
для переключения пользователя на postgres
, psql
является инструментом командной строки PostgreSQL, а ключ -c
нужен для выполнения конкретного запроса.-t
, который выводит данные построчно, и -X
для того, чтобы .psqlrc
не обрабатывался командой psql
.Пишите, кстати, если сталкивались с такими кейсами
@sqlhub
Please open Telegram to view this post
VIEW IN TELEGRAM
❤10👍6🔥3
CREATE OR REPLACE FUNCTION 'имя_процедуры(параметры)' RETURNS 'тип_результата' AS $$
DECLARE
-- переменные_локальные тип_переменной
BEGIN
-- Тело процедуры
-- Может содержать SQL запросы, управляющие конструкции и другие операторы
END;
$$ LANGUAGE plpgsql;
CREATE OR REPLACE FUNCTION hello_world()
RETURNS VOID AS $$
BEGIN
RAISE NOTICE 'Hello, World!';
END;
$$ LANGUAGE plpgsql;
SELECT hello_world();
Таким образом, вы можете создавать и вызывать процедуры в PostgreSQL с помощью PL/pgSQL.
@sqlhub
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16🔥5❤2🤬2👎1
UTF8
. Тогда как Django выдавал следующее сообщение:'latin-1' codec can't encode characters in position 55-64: ordinal not in range(256)
Проблема заключалась в том, что кодировка сервера была первоначально выставлена в
LATIN1
. То есть следующие команды давали следующий вывод:postgres=# show server_encoding; server_encoding ----------------- LATIN1(1 row) postgres=# show client_encoding; client_encoding ----------------- LATIN1(1 row) postgres=# \encoding LATIN1
Выполнение команды
SET CLIENT_ENCODING TO 'utf8';
не давало результата, после выхода из psql
кодировка возвращалась в LATIN1
.sudo apt-get install language-pack-ru
Выполнение процесса русификации
sudo update-locale LANG=ru_RU.UTF-8
И перезагрузка сервера
sudo reboot
После этого кодировка клиента сервера стала UTF8
postgres=# show server_encoding; server_encoding ----------------- LATIN1(1 row) postgres=# show client_encoding; client_encoding ----------------- UTF8(1 row) postgres=# \encoding UTF8
Вот такие дела, этого оказалось достаточно для исправления бага.
Возможно, кому-то будет особенно актуально
@sqlhub
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9❤8🔥3
Для создания дампа базы данных PostgreSQL в текстовом формате на Heroku выполните два действия:
heroku pg:backups:capture && heroku pg:backups:download
pg_restore
:
pg_restore -f mydb.sql latest.dump
Здесь
mydb.sql
— это конечный файл с вашими данными. До начала работы убедитесь, что у вас установлен Postgres для использования команды pg_restore
.@sqlhub
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5👍3🔥2
Такой анализ потенциальных проблем в базе данных имеет очевидные преимущества:
dev/test/prod
) и даже на пустой БД, где нет данных (бэкап структуры без данных)Встраивать такого рода проверки в CI — это однозначно полезная практика. Разовая инвестиция в настройку конвейера исключит спектр потенциальных проблем с расхождением данных.
Подробнее об этом тут:
@sqlhub
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9❤3🔥3
Этот:
SELECT *
FROM table
WHERE property IN ('a','b','c')
или вот этот:
SELECT *
FROM table
WHERE property='a' OR property='b' OR property='c'
in
явно выигрывает из-за компактности.А если рассматривать конкретные реализации - то различия могут быть. Например,
postgresql
строит разные планы для IN
и OR
:explain select * from bigtable where id = 1 or id = 3 or id=4;
QUERY PLAN
----------------------------------
Bitmap Heap Scan on bigtable (cost=13.34..25.34 rows=3 width=12)
Recheck Cond: ((id = 1) OR (id = 3) OR (id = 4))
-> BitmapOr (cost=13.34..13.34 rows=3 width=0)
-> Bitmap Index Scan on bigtable_pkey (cost=0.00..4.45 rows=1 width=0)
Index Cond: (id = 1)
-> Bitmap Index Scan on bigtable_pkey (cost=0.00..4.45 rows=1 width=0)
Index Cond: (id = 3)
-> Bitmap Index Scan on bigtable_pkey (cost=0.00..4.45 rows=1 width=0)
Index Cond: (id = 4)
explain select * from bigtable where id in (1,3,4);
QUERY PLAN
----------------------------------
Index Scan using bigtable_pkey on bigtable (cost=0.44..17.37 rows=3 width=12)
Index Cond: (id = ANY ('{1,3,4}'::integer[]))
Как можно заметить,
IN
был переписан в другую форму и оценён дешевле, чем несколько эквивалентных OR
.Какие-то другие СУБД может быть переписывают оба запроса в идентичное представление, или же переписывают
IN
в группу OR
. Вопросы производительности необходимо рассматривать только в рамках какой-то конкретной реализации.Вот такие дела
@sqlhub
Please open Telegram to view this post
VIEW IN TELEGRAM
👍24🔥10❤5
Управление параллелизмом является важным аспектом в системах БД, которые имеют дело с множеством параллельно выполняющихся транзакций. В PostgreSQL применяются различные методы для обеспечения параллельного доступа к базе данных при поддержке согласованного состояния данных с использованием свойств атомарности и изоляции ACID (атомарность, согласованность, изоляция и длительность).
Этот метод управления параллелизмом используется в системах баз данных для обеспечения параллельного доступа к разделяемым данным. Это осторожный подход, предполагающий, что конфликты между транзакциями весьма вероятны, и предотвращает конфликты наложением блокировок на объекты базы данных (строки или таблицы). Пессимистичное блокирование гарантируют эксклюзивный доступ к данным, но оно может привести к расширению блокировок и сокращению параллелизма по сравнению с подходом оптимистичного блокирования.
Оптимистичный подход в технике управления параллелизмом исходит из того, что конфликты между транзакциями редки, и это позволяет обрабатывать транзакции без наложения блокировок на объекты базы
данных при выполнении всей транзакции. Конфликты проверяются, обнаруживаются и разрешаются только во время фиксации транзакции.
@sqlhub
Please open Telegram to view this post
VIEW IN TELEGRAM
❤7👍7🔥2👎1
Собственно, об этом и идёт речь в статье.
/contrib/
. Во-вторых, pg_proc.dat
является удобной точкой входа для изучения внутренностей PostgreSQL. Также файл бывает полезен, когда вы примерно понимаете, какую функцию ищите, но не знаете ее название.@sqlhub
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤4🔥2
pg_profile/pgpro_pwr
— собственно, об этом и идёт речь в видео. Спикер рассказывает об архитектуре, возможностях, особенностях работы и способах применения этих расширений.
Enjoy)
@sqlhub
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11❤5🔥2
@sqlhub
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥15❤3👍3🥰1