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

PostgreSQL:ГРЕШКА:операторът не съществува:цяло число =променлив знак

Мисля, че ви казва точно какво не е наред. Не можете да сравнявате цяло число с varchar. PostgreSQL е строг и не прави никакво магическо преобразуване на типове вместо вас. Предполагам, че SQLServer прави автоматично преобразуване на типове (което е лошо).

Ако искате да сравните тези два различни звяра, ще трябва да хвърляте един към друг, като използвате синтаксиса за хвърляне :: .

Нещо в този смисъл:

create view view1
as 
select table1.col1,table2.col1,table3.col3
from table1 
inner join
table2 
inner join 
table3
on 
table1.col4::varchar = table2.col5
/* Here col4 of table1 is of "integer" type and col5 of table2 is of type "varchar" */
/* ERROR: operator does not exist: integer = character varying */
....;

Обърнете внимание на varchar преобразуване на типа на table1.col4.

Също така имайте предвид, че преобразуването на типове може евентуално да направи вашия индекс на тази колона неизползваем и има наказание за производителност, което е доста лошо. Още по-добро решение би било да видите дали можете да промените за постоянно един от двата типа колони, за да съответства на другия. Променете грамотно дизайна на вашата база данни.

Или можете да създадете индекс на прехвърлените стойности, като използвате персонализиран, неизменен функция, която прехвърля стойностите в колоната. Но това също може да се окаже неоптимално (но по-добро от кастинг на живо).




  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 DDL скриптове

  2. Изявление за забавяне или изчакване

  3. Преместването на база данни с pg_dump и psql -U postgres db_name <... води до ГРЕШКА:релацията table_name не съществува

  4. PostgreSQL поддържа ли съпоставяния, нечувствителни към акцента?

  5. Вземете всички публикации със сбор от гласове и дали текущият потребител е гласувал за всяка публикация