2023/11/28

PostgreSQL dblink 기본 사용법

PostgreSQL 에서 처음 dblink 를 사용하는 경우에는 dblink 라이브러리를 확장모듈에 로딩을 해놔야 함.  안그러면 알수 없는 함수라는 오류가 표시됨.


-- dblink 로딩 (최초1회 > PgAdmin 에서 해당 DB의 확장모듈에 표시됨)
create extension dblink;


-- DB 연결
select dblink_connect('Test연결1', 'hostaddr=127.0.0.1 port=5432 dbname=test user=test1 password=pwd1');


-- 쿼리
SELECT * FROM 
    dblink('Test연결1', 
   'SELECT "Seq" FROM dbo."Table1" WHERE "CreateDate" < now() - INTERVAL ''2 year''') as t1("Seq" integer) ;


-- DB 연결 해제
select dblink_disconnect('Test연결1');



dblink 의 단점일수도 있고 장점일수도 있긴한데,. 가져올려는 테이블 컬럼을 명시적으로 지정해줘야 하고, row를 임시 저장하는 개체(테이블)에도 명시적을 컬럼 타입을 지정해줘야 함.

컬럼 갯수가 몇개 안되면 상관없는데, 컬럼이 많으면 이것 또한 상당한 노가다 작업이 필요해 진다. 그래서 차라리 각기 호출하여 웹/백엔드 코드단에서 처리하는게 더 편할수도 있음..

그런점에서 본다면,. 확실히 Microsoft SQL Server 가 편하긴 함.




2023/07/26

PostgreSQL 백업 및 복원 예 (일반적인 논리 백업)

■ 백업

명령행 실행시 패스워드 없이 할려면, pgpass.conf 에 작업 계정에 대한 인증 설정이 미리 되어 있어야 함.


(원격)

pg_dump --host localhost --port 5432 --username "postgres" --password "" --dbname "test" --format custom --blobs --verbose --file "test.backup"


(로컬)

pg_dump --username "postgres" --no-password --dbname "test" --blobs --verbose --format=c --file "test.backup"



■ 복원

유의) 복원 대상에 세션이 물려 있는 경우에는, 복원시 대상 개체의 drop, create 쿼리 실행 오류가 발생하고, 그걸 무시하고 계속 진행하는 경우 기존 테이블에 데이터가 중복 복원 추가됨. 그러므로, 세션이 일체 물려 있지 않은 상태에서 복원 작업을 진행해야 함.

SELECT pg_terminate_backend(pid) FROM pg_stat_activity  WHERE pid <> pg_backend_pid() AND datname = 'test';


(DB 복원으로 할 경우. 대상 이름이 다른 경우 미리 생성후)

pg_restore --clean --create --no-privileges --no-owner --username "postgres" --dbname "test_new" --disable-triggers --format=c --verbose "test.backup"

--clean --create 파라미터를 주는 경우 백업에 있는 DB명으로 동일 복원. 하지만 복원 대상과 동일 DB 명을 주면 에러를 뿌림. 

pg_restore 내부 로직이 문제인지 모르겠으나,.

test 를 삭제후 test 에 복원하려면, 다른 DB명으로 복원 지정(생성)후 하면, 원래 test 를 삭제/복원. 동일하게 test 를 지정하면 DB drop,create 오류나고, 생성 안해두면 DB 없다고 또 복원 안됨..;;


(다른 DB에 단순 복원으로 할 경우. 대상 이름이 다른 경우 미리 생성후)

pg_restore --no-privileges --no-owner --username "postgres" --dbname "test_new" --format=c --verbose "test.backup"

테이블의 경우 개체가 이미 있는 경우, 거기에 레코드 추가 insert 방식이므로, 데이터 중복 발생 유의.


(대상 DB에, 대상 테이블 복원으로 할 경우)

pg_restore --clean --no-privileges --no-owner --username "postgres" --dbname "test_new" --table "table1" --disable-triggers --format=c --verbose "test.backup"

--clean 파라미터 주면, 대상 개체를 먼저 삭제후 복원. 파라미터 없는 상태에서 중복 이름 있는 경우, 데이터 중복 복원해 버리므로 유의 필요.






2023/03/16

Gmail 550-5.7.1 missing a valid messageId header 오류

Gmail 주소에 메일 전송시, 아래와 같은 리턴이 있다면, 전송 메일 주소의 SPF 설정/작동 점검을 일단 해볼 필요가 있음. 여러 가능성중에 하나.


Reporting-MTA: dns; googlemail.com
Received-From-MTA: dns; support@my-domain-com.co.kr
Arrival-Date: Wed, 15 Mar 2023 21:16:53 -0700 (PDT)
X-Original-Message-ID: <64129835.170a0220.36737.5aebSMTPIN_ADDED_MISSING@mx.google.com>

Final-Recipient: rfc822; rev-mail@gmail.com
Action: failed
Status: 5.7.1
Diagnostic-Code: smtp; 550-5.7.1 [209.85.220.69] Messages missing a valid messageId header are not
550 5.7.1 accepted. nu11-20020a17090b1b0b00b0023d2e220d6fsor1541472pjb.6 - gsmtp

Last-Attempt-Date: Wed, 15 Mar 2023 21:16:57 -0700 (PDT)


SMTP 서버에서 HeloDomain,SMTPServerDomain 에 지정한 도메인의 SPF 설정. 즉  domain.com 이면 domain.com  호스트의 SPF, mail.domain.com 이면 mail.domain.com 호스트에 SPF 설정/조회가 되도록 설정.

그외 다른 이유는..?







2023/03/01

IIS SMTP STARTTLS 전송 오류

 다음 이유 때문에 원격 도메인  'outlook.com'(으)로 배달하는 동안 '52.96.111.82' 호스트로 메시지를 배달하지 못했습니다. An SMTP protocol error occurred. 오류를 일으킨 SMTP 동사는 'MAIL'입니다.  

원격 서버의 응답은 '451 5.7.3 STARTTLS is required to send mail [BL1P221CA0028.NAMP221.PROD.OUTLOOK.COM 2023-03-01T08:3'입니다.


> IIS SMTP 설정에서, TLS 설정 


가능하면 되고 안되면 일반 연결이 되고 이런 자동 선택적 옵션이 아닌, 무조건 강제 옵션이기 때문에, 이걸 설정하면, TLS 설정을 요구하는 outbound 원격지에선 메일이 수신되지만,. STMP Inbound 에 접근하는 SMTP Client 도 모두 SSL 관련 설정이 되어 있어야 함.



2023/02/28

DistributedCOM 10016

로그 이름:         System
원본:            Microsoft-Windows-DistributedCOM
이벤트 ID:        10016

설명:
응용 프로그램별 권한 설정에서 CLSID가
{0DC1AB8B-A52D-4BA8-BD76-E2819386FB2F}
이고 APPID가
{BDBED08B-7FB7-4EEA-AFD0-53DE534CB638}

인 COM 서버 응용 프로그램에 대한 로컬 활성화 사용 권한을 응용 프로그램 컨테이너 사용할 수 없음 SID(사용할 수 없음)에서 실행 중인 주소 LocalHost(LRPC 사용)의 사용자 abc\aaa SID(S-1-5-21-1173076938-3139918828-2747313952-500)에게 부여하지 않았습니다. 구성 요소 서비스 관리 도구를 사용하여 이 보안 권한을 수정할 수 있습니다.


대상 DCOM 구성요소는 'ActivationHints' 이고,
Lib 경로는 C:\Windows\System32\twinui.appcore.dll

HKEY_CLASSES_ROOT\AppID\{bdbed08b-7fb7-4eea-afd0-53de534cb638}
LaunchPermission, RunAs=Interactive User


터미널 로그온세션과 별개로 0 세션에서 배치파일을 실행할려고 vbscript 'CreateObject("WScript.Shell").Run' 개체를 활용했는데, 이게 Windows Server 2022 부터? 터미널 로그온 상태에서, 동일 계정 다른 세션에서 실행되면, 그런것으로 보이긴 함.. (위 구성요소는 권한 설정이 잠겨 있음). 

아뭏튼, 터미널 로그온이 없는 다른 계정으로 실행하던가 하면 되긴 한데, 일단은 SYSTEM 계정으로 실행하는것으로 변경해 놓음.

그런데, ActivationHints 구성요소가 구체적으로 어떤 작동을 하는것인지, 아무리 검색해봐도 설명을 찾을수가 없넹..;;




Visual Studio CS0518 에러 메시지 표시 관련

Visual Studio 2019 에서, 이전 버전에서 작업했던 ASP.NET MVC 프로젝트를 로드하면, cshtml 에서 c# 언어쪽 문자열에서 CS0518 개체 타입 관련 경고(오류) 표시가 쭈욱 나는 증상..

빈 새프로젝트를 생성해서 비교해 보니, 이건 또 경고창이 안뜬다. web.config 에서 compilers 항목의 버전 지정값이 다르긴 한데..

그래서, 다시 기존 프로젝트를 열었던 VS 를 종료후 다시 실행하니깐.. 응??? 이건 왜 또 경고창이 발생안해 ???.....;;  cshtml 파일 razor 타입 코딩된 페이지 열면 경고창이 떳는데, 메쏘드 부분만 잘라내기 후 다시 그자리에 붙이기 하니, 경고창이 없어진다.. ㅎㅎ 

이건 아무래도.. Visual Studio 소스 편집기 "버그" 인것 같음.. 이유는 위와 같이 어떨땐 경고표시되고 어떨땐 또 정상으로 잘 확인되고... 패턴을 모르겠음..

다른 문서를 찾아보면, mscorlib.dll 로딩 문제라고 하는데 그게 맞는건지도 모르겟고.. 원인 찾아볼려고 했는데... 다들 이런 저런 얘기가 있긴 한데,. 조금씩 다른 얘기들이라서 맞는건지도 모르겠고.. 그냥 이쯤에서 종료..;;





가장 많이 본 글