# Проблема совместимости PG13 🔥

**URL:** <https://meta.discourse.org/t/pg13-compatibility-issue/331068>\
**Category:** Bug\
**Created:** [15.Октябрь.2024 22:28:32 UTC](https://meta.discourse.org/t/pg13-compatibility-issue/331068 "2024-10-15T22:28:32Z")\
**Posts on this page:** 1\
**Showing post:** 1

<div class="post-metadata">

**Author:** ![RGJ](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/rgj/32/523185_2.png) [@RGJ](https://meta.discourse.org/u/RGJ)\
**Post date:** [15.Октябрь.2024 22:28:32 UTC](https://meta.discourse.org/t/pg13-compatibility-issue/331068/1 "2024-10-15T22:28:32Z")

</div>

### О чём это?

Эта миграция добавляет `NULL NOT DISTINCT` к индексу таблицы `problem_check_trackers`. [DEV: Fix problem check tracker unique index not respecting NULLs by Drenmi · Pull Request #29169 · discourse/discourse · GitHub](https://github.com/discourse/discourse/pull/29169/commits/0f3602b3c01de1a5c1fc9a742e9bd12c0de8227d)

> #### В чём проблема?
> 
> По умолчанию при проверке уникальности кортежа для обеспечения уникальности индекса PostgreSQL считает значения `NULL` различными. Из-за этого из-за условий гонки могли ошибочно создаваться несколько записей с `{ identifier: "rails_env", target: nil }`. Это приводило к ошибкам во время выполнения.
> 
> #### Как это решается?
> 
> Удалить существующий индекс и создать его заново с опцией `NULLS NOT DISTINCT`.

### Проблема

Однако `NULLS NOT DISTINCT` был [введён](https://blog.rustprooflabs.com/2022/07/postgres-15-unique-improvement-with-null) в версии Postgres 15 beta2. Текущая версия Postgres при стандартной установке — Postgres 13, которая не поддерживает эту функцию.

### Последствия

- это изменение не окажет никакого эффекта на PG13, поскольку `NULLS NOT DISTINCT` будет игнорироваться ([источник](https://github.com/rails/rails/pull/48608/commits/10bad051a8090fbd346d11ad1cfebb2a7fbde409))
- попытка восстановить резервную копию с сервера PG15 на сервер PG13 завершится ошибкой:

```txt
ERROR: syntax error at or near "NULLS"
LINE 1: ...m_check_trackers USING btree (identifier, target) NULLS NOT ...
^
EXCEPTION: psql failed: ^
/var/www/discourse/lib/backup_restore/database_restorer.rb:92:in `restore_dump'

```

(полная строка: `CREATE UNIQUE INDEX index_problem_check_trackers_on_identifier_and_target ON public.problem_check_trackers USING btree (identifier, target) NULLS NOT DISTINCT;`)

@tgxworld @drenmi

---

_[View the full topic](https://meta.discourse.org/t/pg13-compatibility-issue/331068)._
