Справочник системных ошибок и решений

Windows Server, Active Directory, 1С:Предприятие, СУБД, Linux, Cisco, MikroTik, Asterisk.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты на сайте предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, программного обеспечения, баз данных, сетевого оборудования и других компонентов инфраструктуры. Перед выполнением действий создайте резервную копию и по возможности протестируйте изменения в безопасной среде. Пользователь самостоятельно оценивает риски и несет ответственность за результат. При отсутствии необходимых знаний обратитесь к квалифицированному ИТ-специалисту.

PG_23503 1С:Предприятие и СУБД

PostgreSQL Error 23503: foreign_key_violation — ошибки внешних ключей

Обновлено: 25.08.2026 · Официальная документация ↗
  • Ошибка: ERROR: insert or update on table "orders" violates foreign key constraint "fk_user" (SQLSTATE 23503). Detail: Key (user_id)=(999) is not present in table "users".
  • Ошибка при удалении: update or delete on table violates foreign key constraint ... Key is still referenced.
  • Появление «битых ссылок» и объектов вида <Объект не найден> в базах 1С.

1. Поиск отсутствующих родительских записей

SELECT o.id, o.user_id 
FROM orders o 
LEFT JOIN users u ON o.user_id = u.id 
WHERE u.id IS NULL;

2. Настройка каскадного удаления (CASCADE)

Если при удалении родителя требуется автоматически удалять дочерние строки:

ALTER TABLE orders 
DROP CONSTRAINT fk_user,
ADD CONSTRAINT fk_user 
    FOREIGN KEY (user_id) 
    REFERENCES users(id) 
    ON DELETE CASCADE;

3. Использование отложенных внешних ключей (DEFERRABLE)

Для сложных цепочек связанных вставок внутри одной транзакции:

ALTER TABLE orders 
ADD CONSTRAINT fk_user 
    FOREIGN KEY (user_id) 
    REFERENCES users(id) 
    DEFERRABLE INITIALLY DEFERRED;

4. Временное отключение проверки триггеров целостности (для миграций)

-- Только для разовых административных задач импорта!
ALTER TABLE orders DISABLE TRIGGER ALL;
-- Выполнение импорта
ALTER TABLE orders ENABLE TRIGGER ALL;
💡 Практика специалистов: Всегда индексируйте поля внешних ключей вручную. Отсутствие индекса на FK приводит к последовательному сканированию (Seq Scan) всей дочерней таблицы при каждом DELETE из родительской.

Частые вопросы (FAQ)

Почему возникает ошибка 23503 при вставке данных?

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

Как исправить 'Объект не найден' в 1С:Предприятие?

Запустите тестирование и исправление в режиме 'Очищать ссылки' или 'Создавать объекты' для восстановления ссылочной целостности таблиц СУБД.

Что делает опция ON DELETE SET NULL?

При удалении родительской строки значение внешнего ключа во всех связанных дочерних записях автоматически заменяется на NULL.

Нужно ли создавать индекс на колонку Foreign Key?

Да! PostgreSQL не создает индексы на внешние ключи автоматически. Наличие индекса критически необходимо для предотвращения блокировок всей таблицы при удалении родительских строк.

Полезные материалы
Рекомендуем