Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / CLR функция с доступом к Postgres через npgsql - возможно? / 25 сообщений из 31, страница 1 из 2
05.03.2020, 12:55
    #39934608
Павел Воронцов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CLR функция с доступом к Postgres через npgsql - возможно?
Добрый день, коллеги.

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

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

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

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

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

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

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

Вы с правами sysadmin это выполняете? И версия сервера у вас какая?
...
Рейтинг: 0 / 0
05.03.2020, 13:52
    #39934651
msLex
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CLR функция с доступом к Postgres через npgsql - возможно?
Павел Воронцов
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
05.03.2020, 13:58
    #39934657
Павел Воронцов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CLR функция с доступом к Postgres через npgsql - возможно?
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
05.03.2020, 14:02
    #39934663
msLex
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CLR функция с доступом к Postgres через npgsql - возможно?
а
Код: sql
1.
exec sp_configure 'clr enabled'


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

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

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



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

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

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

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

не используйте ГУИ, он конвертирует вызов в 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
06.03.2020, 13:45
    #39935181
Павел Воронцов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CLR функция с доступом к Postgres через npgsql - возможно?
felix_ff
Павел Воронцов,

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

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

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

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

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


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

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

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


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

ну или приведите репро ошибки, я просто ни разу такого не видел
...
Рейтинг: 0 / 0
08.03.2020, 10:36
    #39935542
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CLR функция с доступом к Postgres через npgsql - возможно?
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
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / CLR функция с доступом к Postgres через npgsql - возможно? / 25 сообщений из 31, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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