powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / CLR функция с доступом к Postgres через npgsql - возможно?
31 сообщений из 31, показаны все 2 страниц
CLR функция с доступом к Postgres через npgsql - возможно?
    #39934608
Фотография Павел Воронцов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день, коллеги.

Встала задача доступаться до данных в postgreSQL из CLR table valued функций. Для доступа хочется использовать npgsql. В лоб не берется - при попытке установки в базу необходимых сборок SQL Server начинает ругаться, что это и то он в себя не пустит. Посему вопросы:

1) Делал ли кто нибудь так?
2) И если делал, то как? Или может есть другие способы, более правильные? Через связанный сервер не хочется, OPENQUERY не умеет правильно с параметрами работать.

Заранее благодарю за содержательные советы.
...
Рейтинг: 0 / 0
CLR функция с доступом к Postgres через npgsql - возможно?
    #39934613
felix_ff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Павел Воронцов,

Лучше любое внешнее взаимодействие выносить в отдельное приложение чем интегрировать в процесс сиквела.
На внешние сборки он вам ругается потому что их нужно импортировать с permissionset = unsafe. ( в большинстве случаев) + импортировать все их зависимости.
...
Рейтинг: 0 / 0
CLR функция с доступом к Postgres через npgsql - возможно?
    #39934617
Фотография Павел Воронцов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
felix_ff,

Спасибо за ответ. Хочется именно изнутри сервера, а то придется менять всю концепцию. Что импортировать все зависимости понятно. unsafe не помогает.
...
Рейтинг: 0 / 0
CLR функция с доступом к Postgres через npgsql - возможно?
    #39934623
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Павел Воронцов
Что импортировать все зависимости понятно. unsafe не помогает.
Так какая ошибка, если сделать unsafe, и импортировать все зависимости?
...
Рейтинг: 0 / 0
CLR функция с доступом к Postgres через npgsql - возможно?
    #39934627
Фотография Павел Воронцов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvg,

Вот например при попытке импорта ValueTuple
...
Рейтинг: 0 / 0
CLR функция с доступом к Postgres через npgsql - возможно?
    #39934633
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Покажите
Код: sql
1.
sp_configure 'clr strict security'
...
Рейтинг: 0 / 0
CLR функция с доступом к Postgres через npgsql - возможно?
    #39934642
Фотография Павел Воронцов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
msLex,

говорит нет такого параметра. Что туда поставить?
...
Рейтинг: 0 / 0
CLR функция с доступом к Postgres через npgsql - возможно?
    #39934645
felix_ff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Павел Воронцов,

Вы с правами sysadmin это выполняете? И версия сервера у вас какая?
...
Рейтинг: 0 / 0
CLR функция с доступом к Postgres через npgsql - возможно?
    #39934651
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Павел Воронцов
msLex,

говорит нет такого параметра.


Код: sql
1.
2.
3.
exec sp_configure 'show advanced options', 1
reconfigure 
exec sp_configure 'clr strict security'



ну за одно и

Код: sql
1.
select @@version
...
Рейтинг: 0 / 0
CLR функция с доступом к Postgres через npgsql - возможно?
    #39934657
Фотография Павел Воронцов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
msLex,
Код: sql
1.
select @@version


Microsoft SQL Server 2017 (RTM) - 14.0.1000.169 (X64) Aug 22 2017 17:04:49 Copyright (C) 2017 Microsoft Corporation Developer Edition (64-bit) on Windows Server 2016 Standard 10.0 <X64> (Build 14393: ) (Hypervisor)
Код: sql
1.
exec sp_configure 'clr strict security'


name minimum maximum config_value run_valueclr strict security 0 1 0 0
...
Рейтинг: 0 / 0
CLR функция с доступом к Postgres через npgsql - возможно?
    #39934663
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а
Код: sql
1.
exec sp_configure 'clr enabled'


?
...
Рейтинг: 0 / 0
CLR функция с доступом к Postgres через npgsql - возможно?
    #39934667
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну и надо глянуть на зависимости этой сборки, их нужно предварительно загрузить
...
Рейтинг: 0 / 0
CLR функция с доступом к Postgres через npgsql - возможно?
    #39934671
felix_ff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Павел Воронцов,

а так это System.ValueTuple я чет сразу то и не посмотрел.
Это сборка со строгим именем, вы не можете ее импортировать в сиквел не из GAC или ее стандартного расположения

Укажите путь импорта не C:\exchange\System.ValueTuple.dll а C:\Windows\Microsoft.NET\Framework64\v4.0.30319\System.ValueTuple.dll
...
Рейтинг: 0 / 0
CLR функция с доступом к Postgres через npgsql - возможно?
    #39934672
Фотография Павел Воронцов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
msLex
а
Код: sql
1.
exec sp_configure 'clr enabled'



?
Конечно да!
Я, собственно, начал загружать эту сборку поскольку от неё зависит ngpsql
...
Рейтинг: 0 / 0
CLR функция с доступом к Postgres через npgsql - возможно?
    #39934673
Фотография Павел Воронцов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
felix_ff
Павел Воронцов,

а так это System.ValueTuple я чет сразу то и не посмотрел.
Это сборка со строгим именем, вы не можете ее импортировать в сиквел не из GAC.

Укажите путь импорта не C:\exchange\System.ValueTuple.dll а C:\Windows\Microsoft.NET\Framework64\v4.0.30319\System.ValueTuple.dll
а, вона чо, Михалыч! Сейчас попробую, спасибо.
...
Рейтинг: 0 / 0
CLR функция с доступом к Postgres через npgsql - возможно?
    #39935129
Фотография Павел Воронцов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Столкнулся с тем, что приходится грузить все зависимые сборки в SQL Server. При этом граф замкнулся - system.web требует system.enterpriseservices, который требует system.runtime.remoting, который требует system.web. Это меня несколько удивило. В интернетах пишут, что если сборку создавать из GAC (или как оно называется?), то сервер сам должен подтягивать и устанавливать всё, но в моём случае это почему то не так. ЧЯДНТ?
...
Рейтинг: 0 / 0
CLR функция с доступом к Postgres через npgsql - возможно?
    #39935136
felix_ff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Павел Воронцов,

это еще один камень в огород мышкокликателей.

не используйте ГУИ, он конвертирует вызов в create assembly blablabla from <binary_serialied_assembly>


вместо этого используйте:
Код: sql
1.
2.
3.
4.
CREATE ASSEMBLY [System.Runtime.Remoting]
AUTHORIZATION [dbo]
FROM 'C:\Windows\Microsoft.NET\Framework64\v4.0.30319\System.Runtime.Remoting.dll'
WITH PERMISSION_SET = UNSAFE


тогда автоматом подцепятся сборки зависимостей
...
Рейтинг: 0 / 0
CLR функция с доступом к Postgres через npgsql - возможно?
    #39935181
Фотография Павел Воронцов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
felix_ff
Павел Воронцов,

это еще один камень в огород мышкокликателей.

не используйте ГУИ, он конвертирует вызов в create assembly blablabla from <binary_serialied_assembly>
вот же сволочи. Спасибо ещё раз.
...
Рейтинг: 0 / 0
CLR функция с доступом к Postgres через npgsql - возможно?
    #39935191
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Павел Воронцов
вот же сволочи
Почему так сделано - понятно.
Они не стали делать 2 совершенно разных ветви кода, для запуска SSMS на сервере, и на другой машине, и сделали однообразно from <binary_serialied_assembly>
...
Рейтинг: 0 / 0
CLR функция с доступом к Postgres через npgsql - возможно?
    #39935195
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
felix_ff,

не используйте сборки из GAC ни по каким соусом. При очередном обновлении видны в воскресенье, сборки станут в известную позицию из-за обновлений .NET. Пишите код так, чтобы сторонние сборки, кроме официально перечисленным, не использовались.
...
Рейтинг: 0 / 0
CLR функция с доступом к Postgres через npgsql - возможно?
    #39935197
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Павел Воронцов
system.web требует...

Сборка System.Web совершенно не нужна для доступа к данным в PostgreSQL.
Что-то вы явно делаете не то.
...
Рейтинг: 0 / 0
CLR функция с доступом к Postgres через npgsql - возможно?
    #39935301
felix_ff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав Колосов
felix_ff,

не используйте сборки из GAC ни по каким соусом. При очередном обновлении видны в воскресенье, сборки станут в известную позицию из-за обновлений .NET. Пишите код так, чтобы сторонние сборки, кроме официально перечисленным, не использовались.


с чего бы это?
как раз GAC и придуман для того что бы позволить использовать сборки нескольким приложениям.
при этом если меняется версия сборки изменится и public keytoken что в свою очередь повлечет изменение пути сохранения в глобальном кэше (для более новых версий) а для старого который размешался в c:\windows\assembly у сборки просто будет другая версия которая будет жить по соседству с ранее задеплоенной.
...
Рейтинг: 0 / 0
CLR функция с доступом к Postgres через npgsql - возможно?
    #39935389
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
felix_ff,

получите ошибку о том, что сохраненная на сервере версия сборки не соответствует версии в GAC и сервер откажется выполнять CLR. Соседства там никак не получается.
...
Рейтинг: 0 / 0
CLR функция с доступом к Postgres через npgsql - возможно?
    #39935524
felix_ff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав Колосов
felix_ff,

получите ошибку о том, что сохраненная на сервере версия сборки не соответствует версии в GAC и сервер откажется выполнять CLR. Соседства там никак не получается.


сервер (sql server) хранит сборки в сериализованном виде, а не подгужает их каждый раз с места откуда выполнял загрузку, т.е. даже если вы удалите сборку из GAC или любой другой директории откуда она была загруженна на сервер это никак не повлияет. она уже хранится в базе в сериализованном виде .
вы даже можете файл сборки удалить после создания ее на сервере, и сборка будет работать.

ну или приведите репро ошибки, я просто ни разу такого не видел
...
Рейтинг: 0 / 0
CLR функция с доступом к Postgres через npgsql - возможно?
    #39935542
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
felix_ff
Владислав Колосов
felix_ff,

получите ошибку о том, что сохраненная на сервере версия сборки не соответствует версии в GAC и сервер откажется выполнять CLR. Соседства там никак не получается.


сервер (sql server) хранит сборки в сериализованном виде, а не подгужает их каждый раз с места откуда выполнял загрузку, т.е. даже если вы удалите сборку из GAC или любой другой директории откуда она была загруженна на сервер это никак не повлияет. она уже хранится в базе в сериализованном виде .
вы даже можете файл сборки удалить после создания ее на сервере, и сборка будет работать.
Имеются в виду зависимые сборки.
Если в сборке, которая в сиквеле, используется та же System.ValueTuple, она подгрузится из, например, C:\Windows\Microsoft.NET\Framework64\v4.0.30319\System.ValueTuple.dll
А после апдэйта фреймворка папка может изменить имя с v4.0.30319, на, скажем, v4.0.30352?
Если может, то да, всё перекорёжит.
...
Рейтинг: 0 / 0
CLR функция с доступом к Postgres через npgsql - возможно?
    #39935801
Фотография Павел Воронцов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA
Павел Воронцов
system.web требует...

Сборка System.Web совершенно не нужна для доступа к данным в PostgreSQL.
Что-то вы явно делаете не то.
Подскажите как обойтись, если npgsql.dll по зависимостям туда приводит.
...
Рейтинг: 0 / 0
CLR функция с доступом к Postgres через npgsql - возможно?
    #39935805
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Павел Воронцов
skyANA
пропущено...

Сборка System.Web совершенно не нужна для доступа к данным в PostgreSQL.
Что-то вы явно делаете не то.
Подскажите как обойтись, если npgsql.dll по зависимостям туда приводит.
Может, это ваш код требует System.Web, а не npgsql.dll?
...
Рейтинг: 0 / 0
CLR функция с доступом к Postgres через npgsql - возможно?
    #39935806
Фотография Павел Воронцов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvg
Павел Воронцов
пропущено...
Подскажите как обойтись, если npgsql.dll по зависимостям туда приводит.
Может, это ваш код требует System.Web, а не npgsql.dll?
Нет, это оно. Мой код использует npgsql
...
Рейтинг: 0 / 0
CLR функция с доступом к Postgres через npgsql - возможно?
    #39935845
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvg
Может, это ваш код требует System.Web, а не npgsql.dll?

Там просто не прямой референс на сборку, а ссылка в графе зависимостей:
...
Рейтинг: 0 / 0
CLR функция с доступом к Postgres через npgsql - возможно?
    #39935880
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры Павловны
Там просто не прямой референс на сборку, а ссылка в графе зависимостей:
А, понятно.

Да, ситуация непростая.
Как я понял, версия с 3.**** работает только под дотнетом 4.5, отсюда необходимость тянуть все её сборки, что невозможно.
А версия до 3 (например, 2.2.7.0) есть для дотнета 4.0, и 3.5, но там кривизна работы mono.security.dll внутри сиквела
...
Рейтинг: 0 / 0
CLR функция с доступом к Postgres через npgsql - возможно?
    #39935882
Фотография Павел Воронцов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvg
Сон Веры Павловны
Там просто не прямой референс на сборку, а ссылка в графе зависимостей:
А, понятно.

Да, ситуация непростая.
Как я понял, версия с 3.**** работает только под дотнетом 4.5, отсюда необходимость тянуть все её сборки, что невозможно .
А версия до 3 (например, 2.2.7.0) есть для дотнета 4.0, и 3.5, но там кривизна работы mono.security.dll внутри сиквела
Вот очень на то похоже. Придется от этой идеи отказаться.
...
Рейтинг: 0 / 0
31 сообщений из 31, показаны все 2 страниц
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / CLR функция с доступом к Postgres через npgsql - возможно?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]