«Схема не существует» в PostgreSQL

Когда я выполняю этот скрипт

CREATE TRIGGER pdate_day_month_decade
AFTER UPDATE ON main."YDate"
FOR EACH ROW
    WHEN (OLD."dayMonth" IS DISTINCT FROM NEW."dayMonth")
        EXECUTE FUNCTION pdate_day_month_decade_trigger();

Я получаю сообщение об ошибке

ОШИБКА: схема «основная» не существует
Состояние SQL: 3F000

Однако INSERT и UPDATE работают с этой схемой правильно, и я проверил, что эта схема используется PUBLIC.

dn результат команды:

\dn
      List of schemas
  Name  |       Owner
--------+-------------------
 main   | postgres
 public | pg_database_owner

Результат show search path:

"$user", public

основное имя таблицы?

kofemann 19.05.2024 11:48

1) В psql сделайте \dn и скопируйте результаты в виде текста в текст вопроса. 2) Также скопируйте и вставьте результат show search_path.

Adrian Klaver 19.05.2024 16:48

Привет и добро пожаловать в ТАК! Не имеет отношения к делу, но вам не обязательно использовать идентификаторы в кавычках в PostgreSQL — без них жизнь намного проще и понятнее! Я рекомендую вам использовать «Snake_case», но это дело вкуса и предпочтений.

Vérace 19.05.2024 17:21

@Vérace, вам придется использовать их, если вы хотите сохранить регистр или использовать зарезервированные слова или специальные символы. Читайте Идентификаторы.

Adrian Klaver 19.05.2024 18:26

@AdrianKlaver - да, возможно, мне следовало упомянуть об этом. Однако, насколько я понимаю, обязать себя сохранять регистр и/или использовать зарезервированные слова и/или знаки препинания в качестве имен таблиц/столбцов/<что угодно> - это просто напрашиваться на неприятности! Это делает SQL непереносимым, неразборчивым и трудным для отладки! Используя принцип KISS, 63 байта составляют i_think_this_is_quite_long_enough_dont_you_comma_i_certainly‌​_do?

Vérace 19.05.2024 19:38

@Верас. Дело в том, что у вас может не быть выбора, вам придется иметь дело с присвоенным вам идентификатором.

Adrian Klaver 19.05.2024 19:43

@AdrianKlaver - ОК - последнее слово (направлено ОП), гораздо предпочтительнее не использовать идентификаторы, требующие кавычек - если вы обязаны, у вас нет выбора. Однако при отсутствии такого требования проще и лучше не использовать идентификаторы в кавычках. Я обнаружил, что многие пользователи PostgreSQL считают, что цитирование идентификаторов является обязательным, хотя (обычно) это не так. Я просто пытался это передать - вы (правильно) отметили, что это может потребоваться. ФП может ответить нам по поводу всего этого - резюме: «цитаты плохие, если это не требуется!»?

Vérace 19.05.2024 20:22

@kofemann это название схемы. Имя отношения — «YDate».

Антон Васюхин 20.05.2024 12:56

@AdrianKlaver, это $user"", public. Я пробовал добавить основной путь поиска перед скриптом, но это не помогло.

Антон Васюхин 20.05.2024 14:06

Вот почему я попросил вас сделать в psql команду \dn и скопировать результаты в виде текста в текст вашего вопроса. Предоставьте запрашиваемую информацию.

Adrian Klaver 20.05.2024 16:28

Добавил результаты, @AdrianKlaver

Антон Васюхин 20.05.2024 18:20

Хм. Что возвращает select nspname, length(nspname) from pg_namespace where nspname ilike 'main%';?

Adrian Klaver 20.05.2024 19:02

nspname: "main", длина: 4, @AdrianKlaver

Антон Васюхин 21.05.2024 08:52

1) Попробуйте reindex table pg_namespace ;. 2) Можете ли вы предоставить более подробную информацию о том, что означает «Однако INSERT и UPDATE работают в этой схеме правильно...»?

Adrian Klaver 21.05.2024 16:32
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
14
146
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Таблица пространства имен переиндексации, предложенная @AdrianKlaver, сработала. После этого запроса:

reindex table pg_namespace;

Триггер успешно создан в базе данных.

Я бы следил за этим, это указывает на то, что индекс был поврежден. Это может быть либо аппаратная проблема, либо что-то (что-то) было не так с этой таблицей или системными таблицами в целом.

Adrian Klaver 21.05.2024 22:12

Другие вопросы по теме