Таблица невидимая в PostgreSQL - неопределенная проблема отношений на разных сеансах - PullRequest
1 голос
/ 05 марта 2012

Я выполнил следующий оператор create с использованием SQLWorkbench в моей целевой базе данных postgresql:

  CREATE TABLE Config (    
  id serial  PRIMARY KEY,       
  pub_ip_range_low  varchar(100),       
  pub_ip_range_high varchar(100)            
  );

Сразу после создания таблицы я запрашиваю содержимое таблицы, набрав «select * from config;»и посмотреть, что таблица может быть получена.Тем не менее, моя java-программа, использующая драйвер JDBC типа 4, не может получить доступ к таблице, когда я выполняю в ней тот же оператор выбора.Когда программа пытается получить к ней доступ, возникает исключение, которое говорит «неопределенное отношение» для таблицы конфигурации.

Мои вопросы:

  1. Почему sqlworkbench, где я ранее запускалоператор create распознает таблицу, в то время как моя Java-программа не может ее найти?
  2. Куда СУБД postgressql помещает созданные мной таблицы?Я не вижу их ни в общедоступных, ни в информационных схемах.

ПРИМЕЧАНИЕ. Я проверил целевую базу данных postgres и нигде не вижу таблицы Config, хотя рабочая среда SQL может запросить ее.Затем я открыл еще один экземпляр SQL Workbench и заметил, что таблица не может быть запрошена (то есть не найдена).Итак, мой вывод заключается в том, что PostgreSQL помещает таблицу, которую я создал в первом запущенном экземпляре SQLBench, в некое кровавое место, связанное с этим сеансом.Другой экземпляр SQL Workbench или моя Java-программа не привязаны к сеансу, поэтому не могут запрашивать ранее созданную конфигурацию таблицы.

Ответы [ 2 ]

2 голосов
/ 05 марта 2012

Единственной «кровавой локацией», которая является локальной для сеанса в PostgreSQL, является схема pg_temp, другими словами: временные таблицы.Но ваша команда CREATE не отображает ключевое слово TEMP[ORARY].Конечно, пока транзакция не подтверждена , никто не видит ничего вне транзакции.

Скорее всего, вы видите переключение хостов / баз данных /порты / или схема search_path.Сочетание с именем таблицы в смешанном регистре также является горячим кандидатом.Если вы не заключите двойные кавычки "Config", таблица завершится строчными буквами в системе, поэтому: config.Если позже вы дважды укажите имя, оно не будет совпадать. В инструкции есть детали .

0 голосов
/ 05 марта 2012

Может быть, не удалось создать дополнительную запятую?

 CREATE TABLE config (
  id serial  PRIMARY KEY,       
  pub_ip_range_low  varchar(100),       
  pub_ip_range_high varchar(100)   -- >> ,           
  );
...