Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 490822a

Browse files
authored
Update and rename TODO.md to TODO.schema_validation.md
1 parent cd83301 commit 490822a

File tree

1 file changed

+1
-37
lines changed

1 file changed

+1
-37
lines changed

‎functions/db_validation/TODO.md‎ renamed to ‎functions/db_validation/TODO.schema_validation.md‎

Lines changed: 1 addition & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -124,40 +124,4 @@
124124
insert into test.test1 values (null, 1); --ok
125125
insert into test.test1 values (1, 2); --ok
126126
insert into test.test1 values (2, 1); --error
127-
```
128-
129-
# TODO валидация потенциальных ошибок в SQL запросах
130-
131-
К валидатору схемы БД это не относится. Собираю на будущее для другого валидатора.
132-
133-
1) Вместо `NOT IN(...)` [лучше](https://github.com/rin-nas/postgresql-patterns-library/blob/master/README.md#%D0%9F%D0%BE%D1%87%D0%B5%D0%BC%D1%83-%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81-%D1%81-%D0%BF%D0%BE%D0%B4%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D0%BE%D0%BC-%D0%B2-NOT-IN-%D0%B2%D0%BE%D0%B7%D0%B2%D1%80%D0%B0%D1%89%D0%B0%D0%B5%D1%82-0-%D0%B7%D0%B0%D0%BF%D0%B8%D1%81%D0%B5%D0%B9) использовать `NOT EXISTS(...)`
134-
135-
2) Возможные ошибки с `timestamp[tz]` в границах значений.
136-
137-
Неправильно:
138-
```sql
139-
SELECT sum(amount)
140-
FROM transactions
141-
WHERE transaction_timestamp
142-
BETWEEN ('2023年02月05日 00:00' AND '2023年02月06日 00:00');
143-
```
144-
145-
Правильно:
146-
```sql
147-
SELECT sum(amount)
148-
FROM transactions
149-
WHERE transaction_timestamp >= '2023年02月05日 00:00'
150-
AND transaction_timestamp < '2023年02月06日 00:00';
151-
```
152-
153-
3) Несколько DDL запросов для одного объекта БД лучше объединять в 1 запрос, если позволяет синтаксис.
154-
4) Несколько DDL запросов для разных объектов БД лучше собирать в группу. Т.е. д.б. группа из DDL запросов и группа из DML запросов.
155-
5) Группу из DDL запросов лучше размещать после группы из DML запросов, так будет меньше длительность эксклюзивной блокировки таблиц.
156-
6) Длительность выполнения группы DDL запросов д.б. < 3 секунд.
157-
7) Обнаруживать звёздочку в месте перечисления колонок в SELECT запросе, рекомендовать её заменить на явное перечисление колонок
158-
8) Если в запросе присутствует `LIMIT` и `OFFSET`, но отсутствует `ORDER BY`, то рекомендовать добавить его.
159-
9) Запретить `UPDATE` запросы без `WHERE`, т.к. он блокирует все строки таблицы. При одновременном выполнении этого запроса в разных транзакциях возникают взаимоблокировки.
160-
161-
# Ссылки
162-
163-
* https://fosdem.org/2023/schedule/event/postgresql_dont_do_this/attachments/slides/5948/export/events/attachments/postgresql_dont_do_this/slides/5948/DontDoThis.pdf
127+
```

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /