- Published on
- •👁️
PostgreSQL 설치 및 사용
- Authors

- Name
- River
PostgreSQL 설치
Scoop 이용하여 PostgreSQL 설치하기
scoop 사이트 : https://scoop.sh/
powershell에서 scoop 설치하기
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser Invoke-RestMethod -Uri https://get.scoop.sh | Invoke-Expression
PostgreSQL 설치하기
PS C:\Users\river> scoop install postgresql ..... done. 'postgresql' (17.4) was installed successfully! ...
PostgreSQL 실행 및 접속하기
PostgreSQL 실행하기
PS C:\Users\river> pg_ctl start 서버를 시작하기 위해 기다리는 중....2025-05-11 18:35:03.280 KST [23576] LOG: starting PostgreSQL 17.4 on x86_64-windows, compiled by msvc-19.42.34436, 64-bit 2025-05-11 18:35:03.283 KST [23576] LOG: listening on IPv6 address "::1", port 5432 2025-05-11 18:35:03.284 KST [23576] LOG: listening on IPv4 address "127.0.0.1", port 5432 2025-05-11 18:35:03.330 KST [20428] LOG: database system was shut down at 2025-05-11 18:27:26 KST 2025-05-11 18:35:03.347 KST [23576] LOG: database system is ready to accept connections 완료 서버 시작됨PostgreSQL 로그인 하기
PS C:\Users\river> psql -U postgres psql (17.4) 도움말을 보려면 "help"를 입력하십시오. postgres=#postgres=#으로 전환되어 로그인 완료
PostgreSQL 사용하기
DB 및 사용자 추가하기
DB 사용자 추가하기
postgres=# create user test_user with password 'test123'; CREATE ROLE
사용할 DB 생성하기
postgres=# create database test_db with encoding='utf-8' owner test_user; CREATE DATABASE
PostgreSQL 나가기
postgres-# \q
새로운 사용자로 새로운 DB에 로그인 하기
PS C:\Users\river> psql -U test_user -d test_db psql (17.4) 도움말을 보려면 "help"를 입력하십시오. test_db=>
테이블 생성 및 row 삽입하기
테이블 생성하기
CREATE TABLE TB_ADMIN ( ADMIN_NO Serial NOT NULL, LOGIN_ID Varchar(20) NOT NULL UNIQUE, PASSWD Varchar(20) NOT NULL, NICK Varchar(20) NOT NULL, EMAIL Varchar(40), PRIMARY KEY (ADMIN_NO) ) Without Oids;test_db=> CREATE TABLE TB_ADMIN test_db-> ( test_db(> ADMIN_NO Serial NOT NULL, test_db(> LOGIN_ID Varchar(20) NOT NULL UNIQUE, test_db(> PASSWD Varchar(20) NOT NULL, test_db(> NICK Varchar(20) NOT NULL, test_db(> EMAIL Varchar(40), test_db(> PRIMARY KEY (ADMIN_NO) test_db(> ) Without Oids; CREATE TABLE
데이터 넣기
INSERT INTO TB_ADMIN(LOGIN_ID, PASSWD, NICK, EMAIL) VALUES('honggildong', '1234', 'HONG', 'hgd@gmail.com'); INSERT INTO TB_ADMIN(LOGIN_ID, PASSWD, NICK, EMAIL) VALUES('jangnara', '1234', 'JANG', 'jnr@gmail.com');test_db=> INSERT INTO TB_ADMIN(LOGIN_ID, PASSWD, NICK, EMAIL) test_db-> VALUES('honggildong', '1234', 'HONG', 'hgd@gmail.com'); INSERT 0 1 test_db=> INSERT INTO TB_ADMIN(LOGIN_ID, PASSWD, NICK, EMAIL) test_db-> VALUES('jangnara', '1234', 'JANG', 'jnr@gmail.com'); INSERT 0 1 test_db=>
select 문
test_db=> select * from tb_admin; admin_no | login_id | passwd | nick | email ----------+-------------+--------+------+--------------- 1 | honggildong | 1234 | HONG | hgd@gmail.com 2 | jangnara | 1234 | JANG | jnr@gmail.com (2개 행)
Procedure & Function 생성하기
Procedure 생성
- Procedure란 일련의 SQL 문을 묶어둔 실행 단위
CREATE OR REPLACE PROCEDURE public.SP_L_ADMIN(out1 refcursor) LANGUAGE plpgsql AS $procedure$ BEGIN OPEN out1 FOR SELECT ADMIN_NO, LOGIN_ID, PASSWD, NICK, EMAIL FROM TB_ADMIN; END; $procedure$ ;test_db=> CREATE OR REPLACE PROCEDURE public.SP_L_ADMIN(out1 refcursor) test_db-> LANGUAGE plpgsql test_db-> AS $procedure$ test_db$> BEGIN test_db$> OPEN out1 FOR test_db$> SELECT ADMIN_NO, LOGIN_ID, PASSWD, NICK, EMAIL FROM TB_ADMIN; test_db$> END; test_db$> $procedure$ test_db-> ; CREATE PROCEDURE
Function 생성
CREATE OR REPLACE FUNCTION public.FN_L_ADMIN(out1 refcursor) RETURNS SETOF refcursor LANGUAGE plpgsql AS $procedure$ BEGIN OPEN out1 FOR SELECT ADMIN_NO, LOGIN_ID, PASSWD, NICK, EMAIL FROM TB_ADMIN; RETURN NEXT out1; END; $procedure$ ;test_db=> CREATE OR REPLACE FUNCTION public.FN_L_ADMIN(out1 refcursor) test_db-> RETURNS SETOF refcursor test_db-> LANGUAGE plpgsql test_db-> AS $procedure$ test_db$> BEGIN test_db$> OPEN out1 FOR test_db$> SELECT ADMIN_NO, LOGIN_ID, PASSWD, NICK, EMAIL FROM TB_ADMIN; test_db$> RETURN NEXT out1; test_db$> END; test_db$> $procedure$ test_db-> ; CREATE FUNCTION
Procedure & Function 테스트
test_db=> begin; BEGIN test_db=*> select fn_l_admin('out1'); fn_l_admin ------------ out1 (1개 행) test_db=*> fetch all from out1; admin_no | login_id | passwd | nick | email ----------+-------------+--------+------+--------------- 1 | honggildong | 1234 | HONG | hgd@gmail.com 2 | jangnara | 1234 | JANG | jnr@gmail.com (2개 행) test_db=*> commit; COMMITtest_db=> begin; BEGIN test_db=*> call sp_l_admin('out1'); CALL test_db=*> fetch all from out1; admin_no | login_id | passwd | nick | email ----------+-------------+--------+------+--------------- 1 | honggildong | 1234 | HONG | hgd@gmail.com 2 | jangnara | 1234 | JANG | jnr@gmail.com (2개 행) test_db=*> commit; COMMIT