Closed MelenchukEvgeniy closed 2 years ago
Не очищает.
Нужен полный текст ошибки.
Ошибка при получении значения атрибута контекста (DefaultDatabase) {ИнструментыРазработчикаTormozit ОбщийМодуль.ирОбщий.Модуль(39020)}: ИмяБД = ПолучитьСоединениеСУБД().DefaultDatabase; {ИнструментыРазработчикаTormozit Обработка.ирСтруктураХраненияБД.Форма.Форма.Форма(445)}: Если Не ирОбщий.ПодтверждениеОперацииСУБДЛкс() Тогда по причине: Произошла исключительная ситуация (ADODB.Connection): Поставщик не поддерживает это свойство.
Колонка "Размер общий" пустая по всем строкам
Исправил
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 ReservedKB,
c.reltuples::integer AS Rows,
'' as IndexType
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
В колонке "Количество строк" есть значения "-1".
Старайся тексты ошибок вставлять непосредственно в текст сообщения. Потом может быть полезно их искать. А по вложенным файлам найти не получится.
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 ReservedKB, c.reltuples::integer AS Rows, '' as IndexType 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
Да, общий размер тоже работает. Через PgAdmin такой же результат получаю.
Старайся тексты ошибок вставлять непосредственно в текст сообщения. Потом может быть полезно их искать. А по вложенным файлам найти не получится.
Хорошо.
Ошибка при получении значения атрибута контекста (DefaultDatabase)
В общем модуле ирОбщий замени функцию
Функция ПодтверждениеОперацииСУБДЛкс() Экспорт
Если ПолучитьСоединениеСУБД() = Неопределено Тогда
Возврат Ложь;
КонецЕсли;
ИмяБД = ПараметрыСоединенияADOЭтойБДЛкс().ИмяБД;
Возврат Вопрос("Вы осознаете риски и ответственность за использование прямого доступа к данным базы """ + ИмяБД + """ и нарушение лицензионного соглашения 1С?", РежимДиалогаВопрос.ДаНет) = КодВозвратаДиалога.Да;
КонецФункции
Ошибка при получении значения атрибута контекста (DefaultDatabase)
В общем модуле ирОбщий замени функцию
Заменил. Эта проблема ушла. Но очистка не происходит. Первая ошибка - не хватает ; после каждого truncate, кроме последнего. Проверил в запроснике постгреса.
truncate table _Reference33; --Справочник.БанковскиеСчета.Основная
truncate table _Reference33_VT3869; --Справочник.БанковскиеСчета.ТабличнаяЧасть.ДополнительныеРеквизиты.ТабличнаяЧасть
truncate table _ReferenceChngR3874 --Справочник.БанковскиеСчета.РегистрацияИзменений
Но в инструменте очистки таблиц появилась следующая ошибка:
Ошибка при вызове метода контекста (Open)
{ИнструментыРазработчикаTormozit Обработка.ирСтруктураХраненияБД.Форма.Форма.Форма(452)}: РезультатЗапроса.Open(ТекстЗапроса, СоединениеADO, adOpenStatic, adLockOptimistic, adCmdText);
по причине:
Произошла исключительная ситуация (PgOleDb): ERROR: cannot insert multiple commands into a prepared statement
В колонке "Количество строк" есть значения "-1".
С этим можно что-то сделать? Похоже, что эти значения соответствуют пустым таблицам.
С этим можно что-то сделать?
Уберу отрицательный диапазон у колонки.
В консоли запросов ИР подключенной к СУБД проверь запрос
SELECT 1;
SELECT 1
В консоли запросов ИР подключенной к СУБД проверь запрос
SELECT 1; SELECT 1
Такая же ошибка:
Произошла исключительная ситуация (PgOleDb): ERROR: cannot insert multiple commands into a prepared statement
Кстати, если в консоли на закладке "ADO" нажимаю кнопку "Эта БД", то автоматически заполняются реквизиты "Сервер БД", "Имя базы", "Пользователь" и "Пароль" (заполняются если я перед этим пользовался инструментом "Структура хранения БД" и указывал там параметры подключения к БД), а вот реквизит "Платформа" устанавливается в значение "MS-SQL ч/з OLEDB" даже если там до этого было указано значение "PostgreSQL ч/з OLEDB".
Значит в этом поставщике OLEDB нет поддержки пакетных запросов. Ну наверное для бесплатного продукта 2006 года это нормально. Кстати в современной платной версии у них есть и 64-разрядный вариант и поддержка работы со схемой БД и пакетные запросы. Текущий достигнутый с этим бесплатным поставщиком результат уже дает много пользы. Подумаю над другими вариантами подключения.
реквизит "Платформа" устанавливается в значение "MS-SQL ч/з OLEDB" даже если там до этого было указано значение "PostgreSQL ч/з OLEDB"
Исправлю
В сухом остатке на текущий момент:
Кстати даже с этим урезанным поставщиком OLEDB в консоли запросов ИР можно выполнить пакетный запрос очистки командой "Выполнить все запросы (F5)" в структуре запроса, т.к. запросы пакета там выполняются по одному.
реализовано в 6.41
Здорово! Благодарю) А как эту задачу закрыть? Или её не нужно закрывать?
кнопка "Close issue" внизу
Ещё раз спасибо!) Если нужна будет какая-нибудь помощь в тестировании - я завсегда "за")
На всякий случай замечу, что лучше закрывать заявку когда проверил исправление в релизе.
Хорошо, я здесь ещё неопытен)
Предложение полностью изменить существующий способ подключения через драйвер PGOLEDB.DLL на стоковый ODBC через MS OLEDB. Сейчас точно также подключается MySQL.
В макете Обработки/ирКонсольЗапросов/ПлатформыADODB поменять строку подключения для PostgreSQL на
Driver={PostgreSQL ODBC Driver(Unicode)}; SERVER=!БазаСервер!; DATABASE=!БазаИмя!; UID=!Пользователь!; PWD=!Пароль!;
Остальные параметры строки соединения не нужны. После этого при установленном из родного комплекта драйвере psqlODBC все работает нативно и в "Консоли запросов", и в инструменте "Структура хранения БД".
Только надо тогда текст ошибки изменить (Обработки/ирКонсольЗапросов/МодульОбъекта[782]). Примерно так:
Установите от имени администратора с помощью Application Stack Builder из инструментов PostgreSQL драйвер psqlODBC той же разрядности, что используемое приложение
@MelenchukEvgeniy Можешь сделать и проверить модификацию от @PythonOfJungle ?
@PythonOfJungle Предположим пользователь не знаком с PostgreSQL и у него на клиентском компьютере не установлено какого либо ПО этой СУБД, но он запустил ИР в клиент-серверной базе на PostgreSQL и хочет посмотреть размеры таблиц БД. В текущей реализации он достаточно быстро скачает и зарегистрирует нужную библиотеку, затем получит параметры подключения от администратора и выполнит неявно нужный прямой запрос к СУБД в инструменте "Структура хранения БД (ИР)".
В предлагаемой тобой модификации ему придется изучать, что такое "Application Stack Builder из инструментов PostgreSQL драйвер psqlODBC" и как это правильно устанавливать и желательно без лишних компонент. Это кажется существенным усложнением в описанном мной случае. Попробуй упростить пользовательский путь.
@tormozit
Логично. Драйвер psqlODBC есть отдельно от общего комплекта. Вот здесь https://www.postgresql.org/ftp/odbc/versions/msi/
Можно смело качать последний, в установщике обе разрядности сразу. Эту же ссылку можно дать в тексте ошибки.
Нюанс только в том, что он в системе называется не "PostgreSQL ODBC Driver(Unicode)", а "PostgreSQL Unicode". Строка подключения будет такая:
Driver={PostgreSQL Unicode}; SERVER=!БазаСервер!; DATABASE=!БазаИмя!; UID=!Пользователь!; PWD=!Пароль!;
Так даже лучше, поскольку штатный установщик PostgreSQL AppStackBuilder скачивает и ставит не самую последнюю версию.
Полагаю, что те пользователи, у которых установлен PostgreSQL и уже вручную установлен комплектный драйвер, сами догадаются поправить строку подключения. А если не догадаются, то ничего страшного, драйверы в системе мешать друг другу не будут.
13.00 - комплектный драйвер 13.02 - из ссылки выше На самом деле это один и тот же драйвер. Для меня только остается загадкой, почему в списке 64-разрядных драйверов две строки - обычная и с указанием "(x64)". 32-разрядный драйвер находится, как ему и положено, в своем списке. Может для совместимости сделали две строки регистрации. В любом случае "PostgreSQL Unicode" работает и для 32-битного клиента, и для 64-битного.
Создал задачу на добавление поддержки ODBC драйвера https://www.hostedredmine.com/issues/954415
@tormozit Сначала вот так и хотел - добавить еще один вариант. Но потом посмотрел код. Если добавить новую строку в список подключения, то открытым останется вопрос, как будет работать инструмент "Структура хранения БД". Поэтому в итоге предложение было не добавить строку а заменить текущую. MySQL же точно также подключается. Вообще говоря, насколько я понимаю, специфические OLE-поставщики в опенсорсе не разрабатывают как раз по той причине, что есть платформенно-независимая технология ODBC и есть универсальный конвертер ODBC > MS OLEDB. Соответственно нет смысла делать для каждой СУБД собственный OLEDB. Хотя проприетарные, конечно, есть.
Реализовано в 6.53
@MelenchukEvgeniy Можешь сделать и проверить модификацию от @PythonOfJungle ?
Добрый вечер. Прошу прощения за долгую реакцию. Дома 1С сейчас не работает. Могу проверить только завтра на работе, но уже неактуально как я понимаю?
@MelenchukEvgeniy Эта правка вошла в релиз. Но без второй проверки. Теперь уже все будут проверять в релизе =)
@tormozit Все отлично работает, спасибо :)
Для клиент-серверного варианта работы хочется иметь возможность указывать параметры подключения не только к СУБД MSSQL, но и к PostgreSQL. Соответственно, при работе с PostgreSQL, хочется видеть реальные размеры таблиц - колонки "Размер данные", "Размер индексы" и "Размер общие".