PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

PostgreSQL JDBC getGeneratedKeys връща всички колони

Повечето драйвери поддържат getGeneratedKeys() чрез закрепване на RETURNING -клауза в края на заявката с колоните, които се генерират автоматично. PostgreSQL връща всички полета, защото има RETURNING * който просто връща всички колони. Това означава, че за да се върне генерираният ключ, не е необходимо да се прави запитване до системната таблица, за да се определи коя(и) колона(и) да се върнат, и това спестява обиколки на мрежата (и време за заявки).

Това имплицитно се допуска от JDBC спецификацията, защото казва :

Четейки между редовете, можете да кажете, че това позволява да кажете „Не знам или е твърде много работа, така че всички колони най-добре представят автоматично генерираните ключове“ .

Допълнителна причина може да е, че е много трудно да се определи кои колони са автоматично генерирани и кои не (не съм сигурен дали това е вярно за PostgreSQL). Например в Jaybird (JDBC драйверът за Firebird, който поддържам) ние също връщаме всички колони, защото във Firebird е невъзможно да се определи кои колони са автоматично генерирани (но трябва да направим запитване към системните таблици за имената на колоните, защото Firebird 3 и по-ранни нямат RETURNING * ).

Поради това винаги е препоръчително изрично да правите заявки за генерираните ключове ResultSet по име на колона, а не по позиция.

Други решения изрично посочват имената на колоните или позициите на колоните, които искате да бъдат върнати, като използват алтернативните методи, приемащи String[] или int[] (въпреки че не съм 100% сигурен как драйверът на PostgreSQL се справя с това).

Между другото:Oracle е (беше?) още по-лош:по подразбиране връща ROW_ID на реда и трябва да използвате отделна заявка, за да получите (генерираните) стойности от този ред.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Postgresql не успява на конкретна заявка ЕДИН път след рестартиране на Windows

  2. Как да свържете резултатите от PGSeaerch към индексната страница във вложени ресурси?

  3. Как да вмъкна PostGIS GEOMETRY Point в Sequelize ORM?

  4. Разлика между индекса GiST и GIN

  5. Принудително да се инсталира Postgres с кодиране UTF8, а не LATIN1?