# 테스트 계정 생성
create user tester login password 'tester';
# 기본적인 권한 부여
grant connect on database postgres to tester;
grant CREATE,USAGE on schema public to tester;
# 테스트 테이블 스페이스 생성
CREATE TABLESPACE tester_ts LOCATION 'C:\table_space\tester_ts';
# 생성 계정이 테이블 스페이스에 모든 권한을 갖도록 owner 적용
ALTER TABLESPACE tester_ts OWNER TO tester;
## 아니면 아래처럼 tablespace 에 CREATE 권한주기
## GRANT CREATE ON TABLESPACE tester_ts TO tester;
# 생성 계정의 디폴트 테이블 스페이스 지정 (이게 핵심!)
alter role tester set default_tablespace = tester_ts;
###################################################
#### 계정 로그아웃 + 생성한 계정으로 다시 로그인 ####
###################################################
# 현재 접속한 ROLE 에 default_tablespace 적용됐는지 확인
show default_tablespace;
# 테스트로 테이블 생성
create table public.something(id serial, name varchar(10));
# 테이블에 테이블 스페이스 적용 여부 확인
SELECT schemaname, tablename, tablespace
FROM pg_tables
WHERE tablename = 'something';
## 출력:
# schemaname | tablename | tablespace
# ------------+-----------+------------
# public | something | tester_ts
CREATE TABLESPACE tester_ts LOCATION 'C:\table_space\tester_ts';
ALTER DATABASE postgres SET default_tablespace = tester_ts;
만약 둘 다 지정했다면 우순순위가 적용되어서
ROLE 의 default_tablespace 가 사용됩니다.