в баге 3448 об этом написано. Но это не важно при загрузке обновления (УРБД) из центра (он пока на dbf) ош: CB SQL State: XX000 Native: 7 Message: ERROR: could not find member 1(32914956,32914956) of opfamily 32915119; Error while executing the quer Загрузка не выполнена!
Можно повторить таким образом в базе ЗИК выполняем следующее: CREATE TEMPORARY TABLE TMPDELREC (TYPE MCHAR(2) NOT NULL, MDID MCHAR(4) NOT NULL, OBJID MCHAR(9) NOT NULL); SELECT * FROM TMPDELREC WHERE 0=1 INSERT INTO TMPDELREC VALUES (E'E1', E' 65', E' O9 ') INSERT INTO TMPDELREC VALUES (E'E1', E' 65', E' YA ') INSERT INTO TMPDELREC VALUES (E'E1', E' 65', E' YB ') ALTER TABLE TMPDELREC ADD PRIMARY KEY (TYPE, MDID, OBJID); ALTER TABLE TMPDELREC CLUSTER ON TMPDELREC_pkey затем делаем запрос SELECT * FROM DT2162 DT, TMPDELREC DELREC WHERE DELREC.TYPE=SUBSTR (CAST((DT.SP2156) as mvarchar), 1, 2) получам ошибку: ERROR: could not find member 1(298099,298099) of opfamily 298262 SQL state: XX000 Ошибка происходит в сравнении DELREC.TYPE=SUBSTR (CAST((DT.SP2156) as mvarchar), 1, 2) т.е. mchar с mvarchar. Это корректное сравнение и для него есть соответствующая функция. Тоже самое сравнение, но с заменой на значения работает нормально. SUBSTR (CAST((DT.SP2156) as mvarchar), 1, 2) это selta заменяет substring(DT.SP2156, 1, 2) DT.SP2156 -- это mchar. Тоже самое, но без CAST'а работает нормально, но тогда рушится: SUBSTR ('postadsfjklj'::mchar(10) , 1, 4) ||SUBSTR ('gresssasd'::mchar(10) , 1, 4) выдает 'post gres ' а это не правильно. Назад в парсере не получится конвертировать т.к. неизвестно изначальный тип. Придумал сделать функцию: -- Function: substrcut(mchar, integer, integer) -- DROP FUNCTION substrcut(mchar, integer, integer); CREATE OR REPLACE FUNCTION substrcut(str mchar, pos integer, len integer) RETURNS mchar AS $BODY$ declare begin return substr(str::mvarchar,pos,len)::mchar; end $BODY$ LANGUAGE 'plpgsql' IMMUTABLE COST 100; ALTER FUNCTION substrcut(mchar, integer, integer) OWNER TO postgres; И такую же для mvarchar, только без преобразований. Будет работать. Но два преобразования. Можно еще заменить сами функции mchar_substring в postgres'e. Но они 1c'овские, и я думаю их менять не надо.
Баги 3601, 3560 закрывать не стал. Так как надо будет сделать более нормальное решение. Т.е. исправить пачи от 1с. Пока будет так. Просто будут создаваться функции для привидения типов при сравнении mchar и mvarchar