Closed MelenchukEvgeniy closed 2 years ago
Какая у тебя клиентская ОС?
Windows 10 Pro.
Открой консоль запросов ИР, выбери тип запроса ADO, на странице ADO выбери драйвер Postgre, заполни параметры. Добейся тут подключения к СУБД и выполнения простейшего запроса. Если на этом пути ты будет устанавливать какие то программы/драйверы или делать настройки в ODBC (например как тут https://infostart.ru/public/978816/ ), то фиксируй их, чтобы я потом их подсказывал пользователю. В итоге мне нужна твоя успешная строка соединения, которую сообщает кнопка "Проверка подключения". Очень надеюсь что стандартная подойдет.
Сделаю. Я ограничен по времени? На работе у меня нет прав на установку любого ПО.
Время не критично. Но какая то экономия времени конечно была бы, если бы я знал некоторые вещи про Postrge сразу.
Дома у меня почти такой же контур развёрнут. Вечером постараюсь сделать, а завтра повторить на работе вместе с админом.
Подключился. Соединение установлено. Фактическая строка соединения: Provider=MSDASQL.1;Persist Security Info=False;User ID=postgres;Data Source=PostgreSQL35W;Initial Catalog=upp Запрос, который ты мне прислал, выполнился, но не дал никаких результатов. В следующем комментарии распишу свои шаги. Запрос по таблице документа, где есть одна запись, вывел одну строку в результат с данными этой самой записи.
Проверь вариант со стандартным для консоли провайдером PostgreSQL OLE DB Provider. Это - вроде бы его бесплатный вариант. Он не требует создания DSN ("квест" который проходят немногие). Далее цитата из его документации: In order to install this software, copy PGOLEDB.DLL and LIBPQ.DLL into your system directory. Next, as administrator, run "regsvr32 PGOLEDB.DLL". You should get a dialog message saying "registration succeeded".
Проверь такой запрос
SELECT
pretty_sizes.table_name AS TableName,
pretty_sizes.tabname AS tabname,
pretty_sizes.tabschema AS tabschema,
pretty_sizes.table_size AS DataKB,
pretty_sizes.indexes_size AS IndexKB,
pretty_sizes.total_size AS total_size,
c.reltuples::integer AS Rows,
'' as IndexType,
0 as ReservedKB,
FROM
(SELECT
all_tables.table_name AS table_name,
all_tables.tabname AS tabname,
all_tables.tabschema AS tabschema,
pg_table_size(table_name) AS table_size,
pg_indexes_size(table_name) AS indexes_size,
pg_total_relation_size(table_name) AS total_size
FROM
(SELECT
('"'
OR table_schema
OR '"."'
OR table_name
OR '"') AS table_name,
table_name AS tabname,
table_schema AS tabschema
FROM
information_schema.tables AS tables
WHERE table_schema LIKE 'public') AS all_tables) AS pretty_sizes
LEFT JOIN pg_class AS c
ON c.oid = tabname::regclass::oid
показать бы скриншотом, но я не могу понять, как их здесь прикреплять
Просто вставляй из буфера обмена
С указанным провайдером сделаю, но уже завтра (вернее, сегодня). Как раз на работе с чистого листа. Сейчас спать пойду, иначе утром не встану.
Добавил поддержку Postgre с указанным мной провайдером, которого надо вручную устанавливать. Пробуй новое расширение https://drive.google.com/file/d/1rsnuX8ALaxLILqHbeGwK1584SHptoQvl/view?usp=sharing
Создал задачу https://www.hostedredmine.com/issues/942055
Жду, пока скачают. У меня нет доступа к облачным хранилищам. А то, что ты вчера писал, пробовать надо? Я с утра ещё пока админов не смог застать.
Указанный мной провайдер устанавливается только с правами администратора и делать это пока надо вручную.
Да, я уже осознал. Тогда дай мне чуть времени. Без админов ничего не могу.
У меня не взлетело. Библиотеки скопировал, регистрация прошла успешно. Даже перезагрузился. Ошибка "Не удаётся найти указанный поставщик".
У меня не взлетело. Библиотеки скопировал, регистрация прошла успешно. Даже перезагрузился. Ошибка "Не удаётся найти указанный поставщик".
Вероятно у тебя провайдер зарегистрирован в разделе реестра одной разрядности, а клиентское приложение ты используешь другой разрядности. У меня этот провайдер обнаруживается при использовании в 32-разрядном клиентском приложении 1С. Также после регистрации COM компонент достаточно перезапускать приложение, т.к. эта ветка реестра кэшируется в процессе ОС. Перезагрузка ОС не требуется.
Попробую поставить 32-разрядную платформу и проверить ещё раз.
Результаты после установки 32-разрядной платформы.
DLL файлы скопировал в папку C:\Windows\SysWoW64. Регистрировал утилитой regsvr32.exe из папки C:\Windows\System32
Попробуй выполнить в консоли запрос
SELECT * FROM _CommonSettings LIMIT 1
для обоих методов соединения (OLEDB и ODBC).
Похоже у OLEDB какие то проблемы с преобразованием типов данных.
Для OLEDB: Ошибка ADO: Произошла исключительная ситуация (PgOleDB): Query returned unhandled type 16425
А такой OLEDB выполняет?
SELECT 1, 'Федя'
ODBC драйвер у меня дома установлен. Здесь его для начала установить нужно. Я вроде вчера такой запрос выполнял, он вернул пустую таблицу.
А такой OLEDB выполняет?
SELECT 1, 'Федя'
Да, выполняется. Одна строка с колонками "column" (значение 1) и "_column_1"(значение Федя)
Найди в моем расширении конфигурации в общем модуле ирОбщий строку
SELECT * FROM _CommonSettings WHERE _SettingsKey
И замени в ней звездочку на 1.
Это ты про расширение, которое прислал?
Небольшой перерыв и я вернусь.
Выходит этот OLEDB провайдер не умеет BINARY типы обрабатывать. Для самых полезных задач в ИР это не проблема. А вот для исследования данных в таблицах СУБД прямыми запросами из консоли запросов ИР - конечно будет проблемой. Но тот кто до этого дойдет, сможет и источник ODBC настроить и подключить.
По поводу конструктора запроса ИР. Этот провайдер OLEDB скорее всего не предоставляет нужной функциональности, т.к. у него в описании упомянуто про это. Но можешь попробовать в точке останова на проблемной строке показать свойства переменной "Конфигурация".
Найди в моем расширении конфигурации в общем модуле ирОбщий строку
SELECT * FROM _CommonSettings WHERE _SettingsKey
И замени в ней звездочку на 1.
Сделал. Настройки соединения с СУБД проглатывает. При установке реквизита "Показывать размеры" - ошибка: SQL Server не существует, или доступ запрещён.
Пробуй новое расширение https://drive.google.com/file/d/1A0TDj7ppieD5oySNMlQC762Yyc5bTMgw/view?usp=sharing
По поводу конструктора запроса ИР. Этот провайдер OLEDB скорее всего не предоставляет нужной функциональности, т.к. у него в описании упомянуто про это. Но можешь попробовать в точке останова на проблемной строке показать свойства переменной "Конфигурация".
Новое расширение скачал и установил. Ошибка при открытии инструмента "Структура хранения БД":
Ты не тот запрос отловил. Эта строка кода выполняет ВСЕ запросы к ADO. Ты отловил первый запрос, но мы уже его ранее проверили. И в нем меньше 100 символов. А в ошибке указано на 301-й символ, т.е. точно другой запрос.
Нашел ошибку. Убери лишнюю запятую
Да, я тоже нашёл. Долго соображал, где текст запроса у тебя находится. Теперь ошибка на символе 584: ... FROM (SELECT ('"' OR...
invalid input syntax for type boolean: """ Это 21 строка запроса - ('"' Тут у меня не хватает соображалки, что это за конструкция и как должно быть.
Тут идет соединение частей строки. Замени все OR на ||. В оригинале там || было. А замена произошла при форматировании моим конструктором.
Взлетело. Размеры таблиц показываются.
Единицы измерения размера адекватные? Команду "Очистка таблиц СУБД" хорошо бы тоже протестировать.
Не, рано радовался. Погоди, я скрины сделаю.
В списке таблиц сначала идёт такой блок, где указаны размеры, но нет "человеческих" имён таблиц:
Потом идёт блок с "человеческими" названиями, но без размеров:
Попробуй такой запрос
SELECT
pretty_sizes.table_name AS fullTableName,
pretty_sizes.tabname AS TableName,
pretty_sizes.tabschema AS tabschema,
pretty_sizes.table_size/1024 AS DataKB,
pretty_sizes.indexes_size/1024 AS IndexKB,
pretty_sizes.total_size/1024 AS TotalKB,
c.reltuples::integer AS Rows,
'' as IndexType,
0 as ReservedKB
FROM
(SELECT
all_tables.table_name AS table_name,
all_tables.tabname AS tabname,
all_tables.tabschema AS tabschema,
pg_table_size(table_name) AS table_size,
pg_indexes_size(table_name) AS indexes_size,
pg_total_relation_size(table_name) AS total_size
FROM
(SELECT
('"'||table_schema||'"."'||table_name||'"') AS table_name,
table_name AS tabname,
table_schema AS tabschema
FROM
information_schema.tables AS tables
WHERE table_schema LIKE 'public') AS all_tables) AS pretty_sizes
LEFT JOIN pg_class AS c
ON c.oid = tabname::regclass::oid
Единицы измерения размера адекватные? Команду "Очистка таблиц СУБД" хорошо бы тоже протестировать.
Ты же вроде в обёртку pretty_size оборачивал? Должно быть адекватно. Я посмотрю чуть позже. Очистка таблиц сделает базу пустой?
Для очистки ТАБЛИЦ просто выбери пустую таблицу. Хочется проверить что сгенерированный запрос корректно выполнится. Выбранную таблицу он очистит, если получится.
Не очищает. Сформированный текст запроса для очистки таблиц:
Попробуй такой запрос
SELECT pretty_sizes.table_name AS fullTableName, pretty_sizes.tabname AS TableName, pretty_sizes.tabschema AS tabschema, pretty_sizes.table_size/1024 AS DataKB, pretty_sizes.indexes_size/1024 AS IndexKB, pretty_sizes.total_size/1024 AS TotalKB, c.reltuples::integer AS Rows, '' as IndexType, 0 as ReservedKB FROM (SELECT all_tables.table_name AS table_name, all_tables.tabname AS tabname, all_tables.tabschema AS tabschema, pg_table_size(table_name) AS table_size, pg_indexes_size(table_name) AS indexes_size, pg_total_relation_size(table_name) AS total_size FROM (SELECT ('"'||table_schema||'"."'||table_name||'"') AS table_name, table_name AS tabname, table_schema AS tabschema FROM information_schema.tables AS tables WHERE table_schema LIKE 'public') AS all_tables) AS pretty_sizes LEFT JOIN pg_class AS c ON c.oid = tabname::regclass::oid
Теперь хорошо. И размеры теперь похожи на правду. До этого было неправильно. На той же таблице Reference53 проверил. В твоём инструменте - 51 928 КБ, в PgAdmin запрос показывает 51 МБ по этой таблице. Сходится)
Колонка "Размер общий" пустая по всем строкам! Не обратил внимания на неё сразу, извини.
Не очищает.
Нужен полный текст ошибки.
Для клиент-серверного варианта работы хочется иметь возможность указывать параметры подключения не только к СУБД MSSQL, но и к PostgreSQL. Соответственно, при работе с PostgreSQL, хочется видеть реальные размеры таблиц - колонки "Размер данные", "Размер индексы" и "Размер общие".