oracle, bigquery만 주로 활용하다가 postgres를 사용할 일이 생겼습니다.

매우 반갑죠.

설치부터 시작하고 postgres에 대해 알아가야겠습니다.


설치

macOS환경에서 Docker로 설치합니다.

(Docker가 설치되어있다는 가정하에) 매우 간단해요.

docker pull postgress
docker run --name my-postgres-container -e POSTGRES_PASSWORD=1234 -p 5432:5432 -d postgres
docker exec -it my-postgres-container psql -U postgres

 

* POSTGRES_PASSWORD와 포트는 사용환경에 맞게 설정하시면 됩니다.

저는 테스트용이기에 1234로 작성했습니다

 

DB 접속

DBeaver를 실행하여 설치한 postgress DB에 접속이 잘 되는지 확인해보겠습니다.

 

 

 

접속이 잘 됩니다.

 

TOP, OFFSET 또는 FOR XML을 함께 지정하지 않으면 뷰, 인라인 함수, 파생 테이블, 하위 쿼리 및 공통 테이블 식에서 ORDER BY 절을 사용할 수 없습니다.

 프로시저 내에서 union 되는 쿼리를 임시테이블(with)로 작성하여 처리하던 중에 위와 같은 에러가 발생했습니다.

문제가 발생한 쿼리 구조는 아래와 같습니다.

;WITH '임시테이블' AS (
SELECT 
    --top 100 percent
    A.aaa
    A.bbb
    A.ccc
FROM	
	AAA AS A
WHERE	...			   

UNION ALL

SELECT
    --top 100 percent
    B.aaa
    B.bbb
    B.ccc
FROM	
	BBB AS B
WHERE	...

ORDER BY B.aaa DESC, B.ccc DESC
)
select * from '임시테이블'

 Union 한 두 select 쿼리 하단에 order by 구문으로 인해 발생한 에러입니다.

쿼리에 select 다음에 주석처리 되있는 'top 100 percent'를 작성해주면 위 에러는 해결이 됩니다.

 

 * 참고로 top N percent 퀴리는 예를 들어 select 쿼리 결과 row수가 400개 일 때 top 20 percent 쿼리를 작성해주면 400개의 20%인 80개의 결과. top 20으로 작성하면 20개의 결과만 출력됩니다

개발환경

  • Windows10 OS
  • SSMS(SQL Server Management Studio) 14버전

 예를 들어서 '사원'의 정보를 갖고 있는 테이블이 있을 때, 사원 테이블에 select/Insert/delete/update 쿼리를 작성or테스트 할 경우가 발생한다.

 단순하겐 테이블의 속성들을 조회하여 일일이 쿼리문을 작성해주면 되지만 시간이 정말 오래걸릴 수도 있고 귀찮은 작업이 될 수 있지만 SSMS에서는 테이블 스크립팅 이라는 기능을 제공하여 테이블의 속성에 맞는 쿼리를 자동으로 생성해 주는 편리한 기능을 제공한다.

데이터베이스 > 테이블 > 작업할 테이블에서 마우스 우클릭 > 새 쿼리 편집기 창 클릭

위 화면 처럼 작업할 테이블을 마우스 우클릭으로 선택 > 테이블 스크립팅 메뉴에 마우스 오버를 해보면 작업할 쿼리를 선택할 수 있다.

개인적으로 insert와 update 쿼리를 자주 사용하는데 insert 테이블 스크립팅을 생성해보면

테이블 속성에 맞는 INSERT 문이 자동으로 생성된다

INSERT 쿼리 문이 생성되며 Values에 친절하게 데이터 타입도 명세되어있으며, 이 부분에 입력할 데이터만 작성해주면 된다

+ Recent posts