Sqlexceptionhelper ошибка отношение не существует

Debugging “relation does not exist” error in postgres So, i was getting this nasty error even when the table clearly existed in t11 database. Even after lot of googling, debugging and trying Stackoverflow solutions, there was no resolution. Then i got a hunch, that i should check what database and schema were actually being […]

Содержание

  1. Debugging “relation does not exist” error in postgres
  2. Нельзя просто использовать имя таблицы PostgreSQL («отношение не существует»)
  3. 7 ответов:
  4. Нельзя просто использовать имя таблицы PostgreSQL («отношения не существует»)
  5. org.postgresql.util.PSQLException: ОШИБКА: отношение «app_user» не существует
  6. 3 ответа
  7. Java SQL «ОШИБКА: отношение» Имя_таблицы «не существует»
  8. 4 ответы

Debugging “relation does not exist” error in postgres

So, i was getting this nasty error even when the table clearly existed in t11 database.

Even after lot of googling, debugging and trying Stackoverflow solutions, there was no resolution. Then i got a hunch, that i should check what database and schema were actually being used when done programmatically (even though dbname was clearly provided in connection string).

If you use database t11 by running c t11 and then run:

select * from information_schema.tables where table_schema NOT IN (‘pg_catalog’, ‘information_schema’)

It will tell you that userinfo5 does exist in t11 database. But what happens when we try to access it programmatically?

So, i ran above query in a golang function, the function which was earlier running query select * from userinfo5 where >

Output showed that database name which was actually being used was postgres and not t11 Why?

Because, my postgres user was configured to not use password. But my connection string had password= This was somehow confusing the DB driver and postgres database was being used and not t11 .

remove password= from connection string so that it looks like: “host=localhost port=5432 user=postgres dbname=t11 sslmode=disable”

  1. Alter user postgres so that it uses password: alter user postgres with password ‘pwd123’;
  2. Change connection string: “host=localhost port=5432 user=postgres password=pwd123 dbname=t11 sslmode=disable”

Источник

Нельзя просто использовать имя таблицы PostgreSQL («отношение не существует»)

Я пытаюсь запустить следующий PHP-скрипт для выполнения простого запроса к базе данных:

это приводит к следующей ошибке:

ошибка запроса: ошибка: отношение «sf_bands» не существует

во всех примерах я могу найти, где кто-то получает ошибку о том, что связь не существует, это потому, что они используют прописные буквы в имени своей таблицы. Мое имя таблицы не имеет прописных букв. Есть ли способ запросить мою таблицу без включения имени базы данных, т. е. showfinder.sf_bands ?

7 ответов:

из того, что я прочитал, эта ошибка означает, что вы не ссылаетесь на имя таблицы правильно. Одна из распространенных причин заключается в том, что таблица определяется со смешанным написанием, и вы пытаетесь запросить ее со всеми строчными буквами.

другими словами, следующее терпит неудачу:

используйте двойные кавычки для разграничения идентификаторов, чтобы вы могли использовать конкретное смешанное написание, как определено в таблице.

Re ваш комментарий, вы можете добавить схему в «search_path», чтобы при ссылке на имя таблицы без уточнения ее схемы запрос соответствовал этому имени таблицы, проверяя каждую схему по порядку. Так же, как PATH в оболочке или include_path в PHP и др. Вы можете проверить свой текущий путь поиска схема:

вы можете изменить путь поиска схемы:

у меня были проблемы с этим и это история (печальная, но правдивая) :

если ваше имя таблицы все строчные, как: счета вы можете использовать: select * from AcCounTs и он будет работать нормально

если ваше имя таблицы все строчные, как: accounts Следующее не удастся: select * from «AcCounTs»

если ваше имя таблицы смешанный случай как: Accounts Следующее не удастся: select * from accounts

если ваше имя таблицы это смешанный случай как : Accounts Следующее будет работать нормально: select * from «Accounts»

Я не люблю вспоминать бесполезные вещи, как это, но надо 😉

запрос процесса Postgres отличается от других RDMS. Поместите имя схемы в двойную кавычку перед именем таблицы, например, «SCHEMA_NAME».»SF_Bands»

поместите параметр dbname в строку подключения. Это работает для меня, в то время как все остальное не удалось.

также, когда делаешь выбор, указать your_schema . your_table такой:

У меня была аналогичная проблема на OSX, но я пытался играть с двойными и одинарными кавычками. Для вашего случая, вы могли бы попробовать что-то вроде этого

для меня проблема заключалась в том, что я использовал запрос к этой конкретной таблице во время инициализации Django. Конечно, это вызовет ошибку, потому что эти таблицы не существовали. В моем случае это было get_or_create метод в пределах a admin.py файл, который выполнялся всякий раз, когда программное обеспечение выполняло какую-либо операцию (в данном случае миграцию). Надеюсь, это кому-то поможет.

я копал эту проблему больше, и узнал о том, как установить этот «search_path» по defoult для нового пользователя в текущей базе данных.

открыть Свойства базы данных, затем открыть лист » переменные» и просто добавьте эту переменную для вашего пользователя с фактическим значением.

Так что теперь ваш пользователь получит это schema_name по умолчанию, и вы можете использовать tableName без schemaName.

Источник

Нельзя просто использовать имя таблицы PostgreSQL («отношения не существует»)

Я пытаюсь запустить следующий скрипт PHP, чтобы выполнить простой запрос к базе данных:

Это приводит к следующей ошибке:

Ошибка запроса: ERROR: отношения «sf_bands» не существует

Во всех примерах я могу найти, где кто-то получает ошибку, указывающую, что отношения не существует, потому что они используют заглавные буквы в имени своей таблицы. В моем имени таблицы нет заглавных букв. Есть ли способ запросить мою таблицу без включения имени базы данных, то есть showfinder.sf_bands ?

Из того, что я прочитал, эта ошибка означает, что вы неправильно ссылаетесь на имя таблицы. Одной из распространенных причин является то, что таблица определена с орфографией с смешанным регистром, и вы пытаетесь запросить ее со всеми строчными буквами.

Другими словами, следующее не выполняется:

Используйте двойные кавычки, чтобы разграничить идентификаторы, чтобы вы могли использовать конкретную орфографию с смешанным регистром, поскольку таблица определена.

Повторите свой комментарий, вы можете добавить схему в «путь поиска», чтобы при ссылке на имя таблицы без квалификации ее схемы запрос соответствовал этому имени таблицы, проверив каждую схему в порядке. Точно так же, как PATH в оболочке или include_path в PHP и т. Д. Вы можете проверить свой текущий путь поиска схемы:

Вы можете изменить путь поиска схемы:

У меня были проблемы с этим, и это история (грустная, но правда):

Если имя вашей таблицы имеет нижний регистр, например: учетные записи, которые вы можете использовать: select * from AcCounTs и он будет работать нормально

Если ваше имя таблицы имеет все нижеследующее значение, например: accounts Следующие select * from «AcCounTs» не будут выполнены: select * from «AcCounTs»

Если ваше имя таблицы смешанно, например: Accounts : Accounts : select * from accounts

Если ваше имя таблицы смешанно, например: Accounts Следующие будут работать нормально: select * from «Accounts»

Я не люблю вспоминать бесполезные вещи, как это, но вы должны;)

Запрос процесса Postgres отличается от других RDMS. Поместите имя схемы в двойную кавычку перед именем вашей таблицы, например «SCHEMA_NAME». «SF_Bands»

Поместите параметр dbname в строку подключения. Это работает для меня, пока все остальное не удалось.

Также, когда вы делаете выбор, укажите your_schema . your_table :

У меня была аналогичная проблема с OSX, но я старался играть с двойными и одинарными кавычками. В вашем случае вы можете попробовать что-то вроде этого

Источник

org.postgresql.util.PSQLException: ОШИБКА: отношение «app_user» не существует

У меня есть приложение, в котором я использую spring boot и postgres. Я получаю эту ошибку, когда пытаюсь создать пользователя.

Когда я запускаю этот запрос в своей базе данных, я получаю ту же ошибку:

Но если я изменил это на:

Как мне настроить это приложение для загрузки spring?

зависимости в pom.xml:

Я вызываю это действие из формы:

и это мой контроллер:

Валидатор, который исправляет ошибку:

И репозиторий является интерфейсом CrudRepository и не имеет реализации:

И отлаживая валидатор, я мог бы получить этот стек:

Спасибо за помощь!

3 ответа

PostgreSQL соответствует стандарту SQL и в этом случае означает, что идентификаторы (имена таблиц, имена столбцов и т.д.) принудительно строятся в нижнем регистре, за исключением случаев, когда они цитируются. Поэтому, когда вы создаете таблицу следующим образом:

вы фактически получаете таблицу app_user . Вы, очевидно, сделали:

а затем вы получите таблицу «APP_USER» .

В Spring вы указываете правильную строку для имени таблицы заглавными буквами, но ее объединяют в запрос на сервер PostgreSQL без кавычек. Вы можете проверить это, прочитав файлы журнала PostgreSQL: он должен показать запрос, сгенерированный Spring, за которым следует ошибка в верхней части вашего сообщения.

Поскольку у вас очень мало контроля над тем, как Spring строит запросы от сущностей, вам лучше использовать идентификаторы нижнего регистра стандарта SQL.

Источник

Java SQL «ОШИБКА: отношение» Имя_таблицы «не существует»

Я пытаюсь подключить netbeans к моей базе данных postgresql. Кажется, что соединение сработало, поскольку я не получаю никаких ошибок или исключений при простом подключении, такие методы, как getCatalog (), также возвращают правильные ответы.

Но когда я пытаюсь запустить простой оператор SQL, я получаю сообщение об ошибке «ОШИБКА: отношение« TABLE_NAME »не существует», где TABLE_NAME — это любая из моих таблиц, которые ДЕЙСТВИТЕЛЬНО существуют в базе данных. Вот мой код:

Я думал, что netbeans может не находить таблицы, потому что он не ищет схему по умолчанию (общедоступную), есть ли способ установить схему в java?

РЕДАКТИРОВАТЬ: мой код подключения. Имя базы данных — Cinemax, когда я опускаю код оператора, я не получаю ошибок.

Разве нельзя так переписать sql? SELECT * FROM .clients — CoolBeans

Вы не показываете, как вы подключаетесь к серверу базы данных. Я подозреваю, что @CoolBeans верен выше или очень близко. Ваша таблица находится в другой схеме (что будет исправлено выше) или в другой базе данных, чем та, которую вы указали при подключении. — Brian Roach

Мне это нравится . не могли бы вы показать нам НАСТОЯЩУЮ ошибку? Я не думаю, что база данных говорит «отношение TABLE_NAME . », когда вы выполняете «select * from clients». — Szymon Lipiński

Я пробовал это, но получаю ту же ошибку: «ОШИБКА: отношение« public.clients »не существует» (то же самое для любой другой из моих таблиц). public — моя единственная схема, так что это также схема по умолчанию. Спасибо за помощь. — Matt

Установите для log_min_duration_statement значение 0 в postgresql.conf, перезапустите базу данных, запустите приложение и проверьте в журналах postgresql, какой реальный запрос отправляется в базу данных. И еще кое-что . вы на 100% уверены, что у вас есть стол? Можете ли вы подключиться к этой базе данных с помощью psql / pgadmin и выполнить там запрос? — Szymon Lipiński

4 ответы

Я подозреваю, что вы создали таблицу, используя двойные кавычки, например, «Clients» или какая-либо другая комбинация символов верхнего / нижнего регистра, поэтому имя таблицы теперь чувствительно к регистру.

Что означает заявление

Если возвращаемое имя таблицы не в нижнем регистре, вы должны использовать двойные кавычки при обращении к нему, что-то вроде этого:

ответ дан 24 апр.

Я пытаюсь использовать sequelize ORM, и в своем запросе на создание он использует кавычки в table_name. Спасибо за ответ. — Kiddo

Источник

Я пытался запустить API с помощью Spring Framework. Работая над этим, я получил вышеуказанное сообщение об ошибке, когда пытался запустить конечные точки. Ниже приведен класс, который я пробовал тестировать на Postman. В котором я использовал таблицу sessions из базы данных PostgreSQL.

package com.pluralsight.conferencedemo.models;


import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import javax.persistence.*;
import java.util.List;

@Entity(name="sessions")
@JsonIgnoreProperties({"hibernateLazyInitializer","handler"})
public class Session {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long session_id;
    private String session_name;
    private String session_description;
    private Integer session_length;

    @ManyToMany
    @JoinTable(
            name="session_speakers",
            joinColumns = @JoinColumn(name = "session_id"),
            inverseJoinColumns = @JoinColumn(name= "speaker_id"))
    private List<Speaker> speakers;

    public Session(){

    }

    public List<Speaker> getSpeakers() {
        return speakers;
    }

    public void setSpeakers(List<Speaker> speakers) {
        this.speakers = speakers;
    }

    public Long getSession_id() {
        return session_id;
    }

    public void setSession_id(Long session_id) {
        this.session_id = session_id;
    }

    public String getSession_name() {
        return session_name;
    }

    public void setSession_name(String session_name) {
        this.session_name = session_name;
    }

    public String getSession_description() {
        return session_description;
    }

    public void setSession_description(String session_description) {
        this.session_description = session_description;
    }

    public Integer getSession_length() {
        return session_length;
    }

    public void setSession_length(Integer session_length) {
        this.session_length = session_length;
    }
}

И сообщение об ошибке, которое я получил в Postman,

{
    "timestamp": "2022-01-03T21:28:36.793+00:00",
    "status": 500,
    "error": "Internal Server Error",
    "path": "/api/v1/sessions"
}

В то время как сообщение об ошибке в IntelliJ, когда я попробовал запрос GET от Postman:

2022-01-04 02:58:36.695  WARN 10200 --- [nio-8080-exec-2] o.h.engine.jdbc.spi.SqlExceptionHelper   : SQL Error: 0, SQLState: 42P01
2022-01-04 02:58:36.695 ERROR 10200 --- [nio-8080-exec-2] o.h.engine.jdbc.spi.SqlExceptionHelper   : ERROR: relation "sessions" does not exist
  Position: 179
2022-01-04 02:58:36.758 ERROR 10200 --- [nio-8080-exec-2] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.dao.InvalidDataAccessResourceUsageException: could not extract ResultSet; SQL [n/a]; nested exception is org.hibernate.exception.SQLGrammarException: could not extract ResultSet] with root cause

org.postgresql.util.PSQLException: ERROR: relation "sessions" does not exist

1 ответ

Это выглядит очень похоже на учебник Spring Boot, который я недавно сделал. Нужно убедиться, что таблица уже существует в схеме базы данных. Способ настройки модели не создает автоматически таблицу в базе данных при запуске API.

Еще одна вещь, которую нужно проверить, это ваши настройки application.properties. Параметр «spring.datasource.url» должен быть установлен на правильную базу данных, которую он ищет. то есть: «jdbc: postgresql://localhost: xxxx/app_name», где app_name — это то, что вы назвали базой данных, а xxxx — это порт.

Я столкнулся с аналогичной проблемой с отношением «многие ко многим» для сеансов и выступающих, и виновником была отсутствующая таблица в базе данных.


0

Will Moore
21 Янв 2022 в 17:59

Я выполняю пакетное обновление hibernate jpa и даю мне следующую ошибку

2015-04-21 15:53:51,907 WARN  [org.hibernate.engine.jdbc.spi.SqlExceptionHelper] (Thread-283 (HornetQ-client-global-threads-462057890)) SQL Error: 0, SQLState: 42P01
2015-04-21 15:53:51,908 ERROR [org.hibernate.engine.jdbc.spi.SqlExceptionHelper] (Thread-283 (HornetQ-client-global-threads-462057890)) ERROR: relation "my_seq_gen" does not exist

Я использую базу данных postgres, и мой идентификатор сгенерирован автоматически

  @Id
@SequenceGenerator(name="seq-gen",sequenceName="MY_SEQ_GEN"initialValue=205, allocationSize=12)
@GeneratedValue(strategy= GenerationType.SEQUENCE, generator="seq-gen")
@Column(name=""ID"",unique=true,nullable=false)
private int id;

Это мой фрагмент кода вставки пакета

getEm().getTransaction().begin();
System.out.println("transaction started--------------");
try {   
    for (Receipt ReceiptEntity : arrReceiptEntity) {
            getEm().persist(ReceiptEntity);
    }
    getEm().getTransaction().commit();
    System.out.println("commited");
} catch (Exception exception) {
    System.out.println("error----------------------------------------------------------------------");
    if(getEm().getTransaction().isActive())
        getEm().getTransaction().rollback();
    LOG.error(exception);
} finally {
    getEm().flush();
    getEm().clear();
    getEm().close();
}

Я добавил следующее свойство в persistence.xml

         <property name="hibernate.id.new_generator_mappings" value="true"/>

Пожалуйста, предложите, что я делаю неправильно.

4b9b3361

Ответ 1

Попробуйте аннотировать ваш id с помощью @Id и @GeneratedValue(strategy=GenerationType.IDENTITY). Это работало для меня с PostgreSql.

UPDATE: он будет работать только в том случае, если столбец id объявлен как SERIAL или BIGSERIAL.

Ответ 2

Если вы не хотите изменять определение вашей сущности, вам нужно создать последовательность в вашей схеме postgreSQL с именем hibernate_sequence.

CREATE SEQUENCE hibernate_sequence START 1;

UPDATE:

Вам не хватает второй последовательности generatef, которую вы определили для вашей сущности, просто добавьте ее, как и в предыдущей:

CREATE SEQUENCE my_seq_gen START 1;

Очень полезное руководство:http://www.concretepage.com/hibernate/generatedvalue-strategy-generationtype-sequence-hibernate

Ответ 3

Надеюсь, вы получите ответ, но если вы все еще находите ответ, это может быть полезно.

У меня была та же проблема и разрешила ее аннотировать метод getter идентификатора с @SequenceGenerator и @GeneratedValue.

@SequenceGenerator(name="seq-gen",sequenceName="MY_SEQ_GEN", initialValue=205, allocationSize=12)
@GeneratedValue(strategy= GenerationType.SEQUENCE, generator="seq-gen")
public int getId(){
    return id;
}

Ответ 4

Можете ли вы попробовать следующее:

  @Id
  @GeneratedValue(strategy = GenerationType.AUTO, generator = "auto_gen")
  @SequenceGenerator(name = "auto_gen", sequenceName = "A")
  @Column(name = "ID")
  private int id;

Спасибо

Ответ 5

У меня была одна и та же проблема. Я решил поставить auto increment на столбец id из таблицы на postgres, он работает, как это.

ALTER TABLE mytable ALTER COLUMN id SET DEFAULT nextval('mytable_id_seq');

ALTER SEQUENCE mytable_id_seq OWNED BY mytable.id; 

Ответ 6

В моем случае добавление свойства name= «hibernate.hbm2ddl.auto» value = « обновление«, решило проблему. Вы должны добавить указанное свойство в persistence.xml

Ответ 7

Согласно сообщению, hibernate не может получить следующее значение последовательности
 , установите столбец @GeneratedId со стратегией GenerationType.IDENTITY вместо GenerationType.SEQUENCE. Итак, у вас будет

@Id
@SequenceGenerator(name="seq-gen",sequenceName="MY_SEQ_GEN"initialValue=205, allocationSize=12)
@GeneratedValue(strategy= GenerationType.IDENTITY, generator="seq-gen")
@Column(name=""ID"",unique=true,nullable=false)
private int id;

Ответ 8

Иногда с аннотацией @Id @GeneratedValue(strategy=GenerationType.IDENTITY) вы можете иметь свою последовательность с пустыми интервалами (после удаления) и неверной следующей позицией автоинкремента. Попробуйте установить следующее значение автоинкремента в положение после наибольшего значения идентификатора:

ALTER SEQUENCE schema.entity_id_seq RESTART WITH 40072;

Ответ 9

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;

Я не знаю, о чем беспокоиться, но при запуске сервера я получаю серию следующих предупреждений:

o.h.engine.jdbc.spi.SqlExceptionHelper   : SQL Warning Code: 0, SQLState: 00000
o.h.engine.jdbc.spi.SqlExceptionHelper   : relation "app_user__user_group" does not exist, skipping
o.h.engine.jdbc.spi.SqlExceptionHelper   : SQL Warning Code: 0, SQLState: 00000
o.h.engine.jdbc.spi.SqlExceptionHelper   : relation "app_user__user_group" does not exist, skipping
o.h.engine.jdbc.spi.SqlExceptionHelper   : SQL Warning Code: 0, SQLState: 00000
o.h.engine.jdbc.spi.SqlExceptionHelper   : relation "google_place" does not exist, skipping
o.h.engine.jdbc.spi.SqlExceptionHelper   : SQL Warning Code: 0, SQLState: 00000
 ...

Я не могу сказать, что это вызывает проблему — пока все работает, — но я хотел бы понять, что здесь происходит.

Это конфигурация, которую я использую:

spring.jpa.properties.hibernate.temp.use_jdbc_metadata_defaults = false
# Because detection is disabled you have to set correct dialect by hand.
spring.jpa.database-platform=org.hibernate.dialect.PostgreSQL95Dialect
spring.datasource.url=jdbc:postgresql://localhost/test-db
spring.datasource.username=postgres
spring.datasource.password=root
spring.datasource.driver-class-name=org.postgresql.Driver
#spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQL95Dialect
#spring.jpa.show-sql=false
spring.jpa.hibernate.ddl-auto=create-drop
  # update
  # create-drop

Вот, например, @Entity для google_place:

@Entity
@Table(name = "google_place")
public class GooglePlace extends AbstractTimestampEntity {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @OneToOne
    @JoinColumn(name = "place_id")
    private Place place;

    @Column(name = "google_place_id", unique = true)
    private String googlePlaceId;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public Place getPlace() {
        return place;
    }

    public void setPlace(Place place) {
        this.place = place;
    }

    public String getGooglePlaceId() {
        return googlePlaceId;
    }

    public void setGooglePlaceId(String googlePlaceId) {
        this.googlePlaceId = googlePlaceId;
    }

}

Понравилась статья? Поделить с друзьями:
  • Sqldumper error log
  • Sqlcmd error microsoft odbc driver 17 for sql server tcp provider error code 0x2746
  • Sqlceexception occurred native error 25035
  • Sqlalchemy timeout error
  • Sqlalchemy database error