Py-Postgresql и Raritan PowerIQ - Не можете найти стол? - PullRequest
0 голосов
/ 25 июня 2010

Я пытаюсь написать Python3 для взаимодействия с внутренним сервером PostgreSQL в Raritan Power IQ (http://www.raritan.com/products/power-management/power-iq/) система.

Я использовал pgAdminIII для подключения к серверу, и он прекрасно связывается с моими учетными данными. Я вижу базы данных, а также схемы в каждой базе данных.

Я сейчас использую py-postgresql, чтобы попытаться написать его, и решаю некоторые проблемы.

Я использую следующее для подключения:

postgresql.open("pq://odbcuser:password@XX.XX.XX.XX:5432/raritan")

для подключения к базе данных raritan, используя пользователя "odbcuser" и пароль "password" (нет, это не настоящий ... lol).

Похоже, что успешно подключился. Я могу выполнить несколько запросов, например

ps = db.prepare("SELECT * from pg_tables;")
ps()

удается перечислить все таблицы / представления в базе данных "raritan".

Однако затем я пытаюсь получить доступ к определенному представлению, и оно прерывается. База данных "raritan" имеет две схемы: "odbc" и "public".

Я могу получить доступ к представлениям из общедоступной схемы. E.g.:

ps = db.prepare("SELECT * from public.qrypwrall;")
ps()

работает в некоторой степени - я получаю ошибку «Отказано в доступе», так же как и я в pgAdminIII, поскольку моя учетная запись не имеет доступа к этому представлению, но синтаксически это выглядит нормально и находит таблицу.

Однако, когда я пытаюсь получить доступ к представлению в «odbc», оно просто ломается Например:

>>> ps = db.prepare("SELECT * from odbc.Aisles;")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Python31\lib\site-packages\postgresql\driver\pq3.py", line 2291, in prepare
ps._fini()
  File "C:\Python31\lib\site-packages\postgresql\driver\pq3.py", line 1393, in _
fini
    self.database._pq_complete()
  File "C:\Python31\lib\site-packages\postgresql\driver\pq3.py", line 2538, in _
pq_complete
    self.typio.raise_error(x.error_message, cause = getattr(x, 'exception', None
))
  File "C:\Python31\lib\site-packages\postgresql\driver\pq3.py", line 471, in ra
ise_error
    self.raise_server_error(error_message, **kw)
  File "C:\Python31\lib\site-packages\postgresql\driver\pq3.py", line 462, in ra
ise_server_error
    raise server_error
postgresql.exceptions.UndefinedTableError: relation "odbc.aisles" does not exist

  CODE: 42P01
  LOCATION: File 'namespace.c', line 268, in RangeVarGetRelid from SERVER
STATEMENT: [parsing]
  statement_id: py:0x10ca1b0
  string: SELECT * from odbc.Aisles;
CONNECTION: [idle]
  client_address: 10.180.9.213/32
  client_port: 2612
  version:
    PostgreSQL 8.3.7 on i686-redhat-linux-gnu, compiled by GCC gcc (GCC) 4.1.2 2
0071124 (Red Hat 4.1.2-42)
CONNECTOR: [IP4] pq://odbcuser:***@10.180.138.121:5432/raritan
  category: None
DRIVER: postgresql.driver.pq3.Driver

Тем не менее, я могу получить доступ к той же таблице (Aisles) штрафа в pgAdminIII, используя те же учетные данные (и в отличие от общедоступных, у меня фактически есть разрешения на все эти таблицы.

Есть ли причина, по которой py-postgresql может не видеть эти представления? Или что-нибудь, что вы можете выбрать из сообщений об ошибках?

У меня есть подозрение, что это связано с PowerIQ, использующим смешанный регистр для имен таблиц (например, "Проход"). Тем не менее, я не совсем уверен, как бороться с этим в psycopg. Как именно я изменил бы, скажем, мой cursor.execute хотел бы заключить в кавычки таблицу?

cursor.execute('SELECT * from "public.Aisles"')

тоже не работает.

Ура, Victor

1 Ответ

1 голос
/ 28 июня 2010

Вы пробовали это так: «ВЫБЕРИТЕ * из публики». «Проходы»?

При цитировании все это превращается в неквалифицированное (без схемы) имя таблицы, в котором есть точка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...