Отсутствующие буквы объектов базы данных, возвращаемых в соединении ODBC DBI SQL Server

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

Фон

У меня MacBook Pro со следующими характеристиками:

  Model Name:       MacBook Pro
  Model Identifier: MacBookPro15,1
  Processor Name:   6-Core Intel Core i7
  Processor Speed:  2.6 GHz
  Number of Processors: 1
  Total Number of Cores:    6
  L2 Cache (per Core):  256 KB
  L3 Cache: 9 MB
  Hyper-Threading Technology:   Enabled
  Memory:   32 GB
  Boot ROM Version: 1037.0.78.0.0 (iBridge: 17.16.10572.0.0,0)

Мое соединение ODBC установлено с использованием FreeTDS, как указано здесь .

Соответствующая часть freetds.conf выглядит следующим образом:

# The POC SQL Server
[POC]
host = 172.22.238.154
port = 1433
tds version = 7.3

Мой файл odbcinst.ini выглядит следующим образом:

[FreeTDS]
Description=FreeTDS Driver for Linux & SQL Server 
Driver=/usr/local/lib/libtdsodbc.so
Setup=/usr/local/lib/libtdsodbc.so
UsageCount=1

Мой файл odbc.ini указан следующим образом:

[POC]
Description         = Connecton to Partners for our children SQL Server 
Driver              = FreeTDS
Servername          = POC

Я пытаюсь подключиться к базе данных SQL Server 2012 (через VPN), используя следующую информацию о подключении в R:

con <- DBI::dbConnect(odbc::odbc()
                  ,dsn = "POC"
                  ,uid = Sys.getenv("MSSQL_UN")
                  ,database = "CA_ODS"
                  ,pwd = Sys.getenv("MSSQL_PW"))

Это создает следующий объект соединения:

> con
  <OdbcConnection> POC2
  Database: CA_ODS
  Microsoft SQL Server Version: 11.00.7001

В общем, это соединение работает как положено. Я могу запросить базу данных, используя DBI::dbGetQuery(con, "select * from MyTable"), dplyr::tbl(con, MyTable) и т. д. без проблем.

Проблема

Однако RStudio отображает только каждую вторую букву объектов базы данных и усекает имена объектов после первых нескольких букв. Следующий снимок экрана должен хорошо иллюстрировать проблему:

введите здесь описание изображения

База данных, к которой я пытаюсь подключиться, называется CA_ODS. Однако обозреватель объектов RStudio отображает только каждую вторую букву имени базы данных (т. е. DB указан как C_D).

Похоже, что это не ограничивается RStudio как таковой. Хотя результаты фактических запросов к базе данных работают нормально, как описано выше, возвращенные имена из INFORMATION_SCHEMA кажутся соответствующими информации в обозревателе объектов. Ниже при запуске непосредственно из SQL Server Management Studio возвращаемое TABLE_CATALOG равно CA_ODS, TABLE_SCHEMA равно ndacan и т. д. Однако при запуске через соединение с БД я получаю следующее.

> DBI::dbGetQuery(con, "SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE 
TABLE_SCHEMA='ndacan'")
   TABLE_CATALOG TABLE_SCHEMA      TABLE_NAME TABLE_TYPE
1            C_D          naa            f21v BASE TABLE

Вопрос

Любые предложения относительно того, как я могу повторно указать свое соединение ODBC в R или в моих конфигурациях FreeTDS, чтобы получить полное имя возвращаемых объектов базы данных?


person joemienko    schedule 24.10.2019    source источник
comment
Вероятно, связано: github.com/r-dbi/odbc/issues/283 . Я предполагаю, что ваш macos работает под управлением R-3.6. Похоже, что некоторым людям помогли две вещи: (1) переход на R-3.5.3; и (2) переустановка пакета odbc из исходного кода (не двоичный файл CRAN).   -  person r2evans    schedule 25.10.2019
comment
@r2evans Это исправило это для меня (т.е. install.packages("odbc", type = 'source'))   -  person joemienko    schedule 25.10.2019
comment
Если вы хотите дать ответ, я приму его. Несвязанный (у меня возникла эта проблема перед обновлением до Catalina, но Catalina, похоже, использовала XCode) — мне нужно было переустановить XCode, прежде чем я смог получить odbc для установки из исходного кода. xcode-select --install должен помочь XCode   -  person joemienko    schedule 25.10.2019
comment
Я считаю, что вы ответили бы себе (с шагами, которые вы предприняли), было бы более заслуживающим доверия: у меня нет macos, и я только перенаправлял сторонний разговор. Вы же, наоборот, сделали немного больше. В дополнение к самостоятельным ответам, вероятно, было бы полезно включить дополнительные шаги Xcode, которые вы предприняли, в комментарий к исходной проблеме (github.com/r-dbi/odbc/issues/283), так как они все еще выясняют это. Спасибо!   -  person r2evans    schedule 25.10.2019


Ответы (1)


Как отмечено в комментариях @r2evans, это проблема с odbc, работающим в R 3.6.0 на Mac.

В общем, кажется, что это можно исправить, переустановив odbc из исходников install.packages("odbc", type = 'source').

Как также отмечалось в комментариях, я недавно обновил свой Mac до Catalina. Перед установкой odbc из исходного кода мне нужно было сначала переустановить XCode, используя xcode-select --install из моего терминала.

Как видно на снимке экрана ниже, теперь я получаю полные имена объектов, отображаемые из соединения odbc.

введите здесь описание изображения

person joemienko    schedule 25.10.2019
comment
спасибо, это действительно помогло мне! (stackoverflow.com/questions/58777915/) - person Dhiraj; 10.11.2019