Отсутствуют буквы объектов базы данных, возвращаемых в ODBC-соединении DBI SQL Server - PullRequest
1 голос
/ 25 октября 2019

К сожалению, я не смогу создать хорошую репродукцию для этой проблемы, не предоставив конфиденциальную информацию о базе данных, с которой у меня возникли проблемы. Надеюсь, у меня достаточно информации ниже, чтобы обозначить любые очевидные проблемы, которые поймут эксперты 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 отображает только все остальные буквы объектов базы данных и усекает имена объектов после первых нескольких букв. Следующий снимок экрана должен хорошо иллюстрировать проблему:

enter image description here

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

Это также не ограничивается RStudio per se . Хотя результаты реальных запросов к базе данных работают нормально, как описано выше, возвращаемые имена из 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, чтобы получить полное имя возвращаемых объектов базы данных?

1 Ответ

1 голос
/ 25 октября 2019

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

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

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

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

enter image description here

...