Linked Server를 사용하여 SQLServer에서 Postgres에 연결
7156 단어 SQLServerPostgreSQLlinkedserver
개요
Postgres를 기본 DB로 사용하는 환경에서,
사정에 의해 SQLServer 경유로 Postgres에 접속하고 싶어졌다.
다음과 같은 연결
Client -> SQL Server -> Postgres
이것을 SQLServer Linked Server
직접 관련이 없는 것도 있지만, 구축한 환경의 그 외 정보
설정 절차
사전 준비
사전에 SQLServer를 배치하는 인스턴스에 SQLServer
와 SSMS
를 인스톨 해 사용할 수 있도록 해 둔다.
Postgres ODBC 드라이버 설치
posrgres12라면 여기에서 다운로드
흐름에 따라 SQLServer를 배포하는 인스턴스에 설치합니다.
SQLServer에 연결된 서버 설정
SSMS
에서 쿼리 편집기를 열고 아래 예제와 같이 작성한 다음 실행
※중에서 postgres에의 접속 설정이 있으므로 재작성해 주세요
※이번은 ssh 터널 경유의 예이므로, postgres server가 localhost라든지 port12345야가 되고 있습니다
DECLARE @name NVARCHAR(4000);
DECLARE @provider NVARCHAR(4000);
DECLARE @provstr NVARCHAR(4000);
DECLARE @db_name NVARCHAR(4000);
-- destination postgres database
SET @name = N'test'; -- リンクServerの名前。任意につける。後にselectとかする時に必要
SET @provider = N'MSDASQL';
SET @provstr = 'Driver={PostgreSQL UNICODE};Server=localhost;Port=12345;Database=test_db;UID=test_user;Password=test_user_password;Network=dbmssocn;'
SET @db_name = N'test_db'; -- postgres db name
-- create linked server
EXEC MASTER.dbo.sp_addlinkedserver @server = @name
,@srvproduct = N'PostgreSQL'
,@provider = @provider
,@provstr = @provstr
,@catalog = @db_name
-- set up Extended properties of the Linked Server
EXEC MASTER.dbo.sp_serveroption @server = @name
,@optname = 'data access'
,@optvalue = 'true'
EXEC MASTER.dbo.sp_serveroption @server = @name
,@optname = 'use remote collation'
,@optvalue = 'true'
EXEC MASTER.dbo.sp_serveroption @server = @name
,@optname = 'rpc'
,@optvalue = 'true'
EXEC MASTER.dbo.sp_serveroption @server = @name
,@optname = 'rpc out'
,@optvalue = 'true'
GO
잘 설정할 수 있으면 아래와 같이 SSMS
로부터 테이블 정보등을 볼 수 있다
SQLServer에서 Postgres 테이블로 쿼리 게시
SQLServer에서 보통 select를 발행하면 SQLServer에만 참조 잠금이 걸린다.
이것은 싫어.T-SQL
의 OPENQUERY
를 사용해 SQL을 발행하면 참조 락이 걸리지 않는 것 같다.
select * from OPENQUERY(
hoge, -- link server name
'select * from xxxxxxxxx'
)
posrgres12라면 여기에서 다운로드
흐름에 따라 SQLServer를 배포하는 인스턴스에 설치합니다.
SQLServer에 연결된 서버 설정
SSMS
에서 쿼리 편집기를 열고 아래 예제와 같이 작성한 다음 실행※중에서 postgres에의 접속 설정이 있으므로 재작성해 주세요
※이번은 ssh 터널 경유의 예이므로, postgres server가 localhost라든지 port12345야가 되고 있습니다
DECLARE @name NVARCHAR(4000);
DECLARE @provider NVARCHAR(4000);
DECLARE @provstr NVARCHAR(4000);
DECLARE @db_name NVARCHAR(4000);
-- destination postgres database
SET @name = N'test'; -- リンクServerの名前。任意につける。後にselectとかする時に必要
SET @provider = N'MSDASQL';
SET @provstr = 'Driver={PostgreSQL UNICODE};Server=localhost;Port=12345;Database=test_db;UID=test_user;Password=test_user_password;Network=dbmssocn;'
SET @db_name = N'test_db'; -- postgres db name
-- create linked server
EXEC MASTER.dbo.sp_addlinkedserver @server = @name
,@srvproduct = N'PostgreSQL'
,@provider = @provider
,@provstr = @provstr
,@catalog = @db_name
-- set up Extended properties of the Linked Server
EXEC MASTER.dbo.sp_serveroption @server = @name
,@optname = 'data access'
,@optvalue = 'true'
EXEC MASTER.dbo.sp_serveroption @server = @name
,@optname = 'use remote collation'
,@optvalue = 'true'
EXEC MASTER.dbo.sp_serveroption @server = @name
,@optname = 'rpc'
,@optvalue = 'true'
EXEC MASTER.dbo.sp_serveroption @server = @name
,@optname = 'rpc out'
,@optvalue = 'true'
GO
잘 설정할 수 있으면 아래와 같이
SSMS
로부터 테이블 정보등을 볼 수 있다SQLServer에서 Postgres 테이블로 쿼리 게시
SQLServer에서 보통 select를 발행하면 SQLServer에만 참조 잠금이 걸린다.
이것은 싫어.T-SQL
의 OPENQUERY
를 사용해 SQL을 발행하면 참조 락이 걸리지 않는 것 같다.
select * from OPENQUERY(
hoge, -- link server name
'select * from xxxxxxxxx'
)
select * from OPENQUERY(
hoge, -- link server name
'select * from xxxxxxxxx'
)
Reference
이 문제에 관하여(Linked Server를 사용하여 SQLServer에서 Postgres에 연결), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/AkihiroTakamura/items/2da977e9362533611cfc텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)