Мисля, че ви казва точно какво не е наред. Не можете да сравнявате цяло число с 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.
Също така имайте предвид, че преобразуването на типове може евентуално да направи вашия индекс на тази колона неизползваем и има наказание за производителност, което е доста лошо. Още по-добро решение би било да видите дали можете да промените за постоянно един от двата типа колони, за да съответства на другия. Променете грамотно дизайна на вашата база данни.
Или можете да създадете индекс на прехвърлените стойности, като използвате персонализиран, неизменен функция, която прехвърля стойностите в колоната. Но това също може да се окаже неоптимално (но по-добро от кастинг на живо).