Tech/DB

PowerShell - Postgresql 연동

트리시스 2021. 6. 5. 14:07
반응형

PowerShell 사용시 Postgresql과 연동하는 방법을 정리해봅니다. 

여러번 삽질을 통했고.. 결국 ODBC부터 설정하고 나서야 연결이 가능했으며,

실제 연동을 하고나서도 테이블의 컬럼 type을 맞춰주고 맞췄는데도

데이터값이 제대로 들어가지 못하는 상황이 있었습니다.

 

아무튼 위 데이터 검증여부는 연동하고나서 테스트하면서 잡아야 할 겁니다. 

 

Postgresql 서버가 미리 구축되어있다면 개발PC 또는 개발서버에 맞는 ODBC 드라이버를 설치하시고 셋팅해야합니다. 

https://www.postgresql.org/ftp/odbc/versions/msi/

 

PostgreSQL: File Browser

 

www.postgresql.org

 

ODBC 드라이버를 다운 받고 설치하시면 됩니다 .

설치하고나서

아래 설정방법부분을 참고해서 셋팅하시면 됩니다. 크게 어렵지 않습니다. 

 

https://docs.microsoft.com/ko-kr/sql/integration-services/import-export-data/connect-to-a-postgresql-data-source-sql-server-import-and-export-wizard?view=sql-server-ver15 

 

PostgreSQL 데이터 원본에 연결(SQL Server 가져오기 및 내보내기 마법사) - SQL Server Integration Services (SSI

PostgreSQL 데이터 원본에 연결(SQL Server 가져오기 및 내보내기 마법사)

docs.microsoft.com

 

$psqlServer = "서버IP"
$psqlId = "아이디"
$psqlPw = "암호"
$psqlDbname = "DB이름"
$psqlDbPort = "DB포트"


function Set-ODBC-Data{
   param([string]$query=$(throw 'query is required.'))
  $conn = New-Object System.Data.Odbc.OdbcConnection
  $conn.ConnectionString= "Driver={PostgreSQL Unicode(x64)};Server=$psqlServer;Port=$psqlDbPort;Database=$psqlDbname;Uid=$psqlId;Pwd=$psqlPw;"
  $cmd = new-object System.Data.Odbc.OdbcCommand($query,$conn)
  $conn.open()
  $cmd.ExecuteNonQuery()
  $conn.close()
}


$query = "INSERT INTO tablename (colname) VALUES (colvalue)"
set-odbc-data -query $query

 

해외사이트를 참고해서 간단히 만들어본 코드입니다. 

여기서는 insert 부분만 참고해서 수정했습니다.

 

https://community.idera.com/database-tools/powershell/ask_the_experts/f/learn_powershell_from_don_jones-24/13965/powershell-v3-odbc-postgresql-insert-query

 

Powershell v3 + ODBC + PostgreSQL + INSERT query - PowerShell General - Ask the Experts - IDERA Community

 

community.idera.com

 

앞서 데이터를 DB에 넣을 때 값이 이상하게 들어간다고 말씀드렸던 부분이 있었습니다.

예를 들어 오늘 날짜로 2021-06-05이런 형태의 string 값을 넣고자했는데 

실제 DB에 들어갈 때는 숫자로 인식하여 값은 2010이 들어갑니다. 수식이 되어버려 2010이 된 것이죠 

방법을 잘 찾지못해서 또 노가다를 했습니다. substring으로 잘라 넣은것이죠 

C# 하다가 powershell에서는 이런 경우도 겪어보네요 

 

 

 

반응형