티스토리 뷰
Ubuntu 20.04의 터미널 환경에서 직접 실행하는 경우
DB서버 내 경로를 인식할 수 있음
postgres@ubuntu:~$ export PGCLIENTENCODING='uhc'
postgres@ubuntu:~$ psql test_db
test_db=> set client_encoding='UHC'; #일회용 세션
# 우분투 서버 내의 파일경로 입력
test_db=> \copy test FROM '/home/data/test.txt' CSV DELIMITER '|'; # 헤더 없는 경우, 헤더 있을 시에는 `HEADER` 추가
>> COPY 193765 # 결과
set client_encoding 영구 설정
postgreSQL의 configration 수정해야함
우분투에서 apt로 설치한 경우, /etc/postgresql/버전/main에 위치한 postgresql.conf 수정
한글 인코딩을 위해 UHC로 설정함
client_encoding='UHC'
로컬에서 파이썬(python)으로 업로드할 경우
DB서버 내 경로 인식하지 못함(COPY, \copy 명령어 둘 다 에러남)
로컬 경로에 있는 데이터를 업로드
# 서버 연결
import psycopg2 #psycog2 패키지 임포트
connection = psycopg2.connect(
host='ip주소',
port = 포트번호,
database = 'DB명',
user = 'postgres아이디',
password = '비밀번호')
cursor = connection.cursor()
# 각 테이블의 스키마를 정의하는 SQL문 작성 (chatGPT 활용하면 편함)
table_schema ='''
CREATE TABLE test (
a varchar(5),
b varchar(10),
d varchar(5),
e varchar(5),
f varchar(12),
PRIMARY KEY (a, b)
);
'''
# 테이블 스키마 생성
try:
cursor.execute(table_schema)
connection.commit()
except Exception as e:
print('Error:', e)
connection.rollback()
import time
# 파일이 여러개라면 경로와 테이블 이름 설정하는 부분만 for문으로 묶어서 실행하면 됨
file_path = r'C:\data\test.txt'
table_name = '테이블명'
try:
start_time = time.time() # 코드 블록 시작 시간 기록
with open(file_path, 'r', encoding='cp949') as f: #한글 인코딩
# 파일 포인터의 현재 위치 저장
original_position = f.tell()
cursor.copy_from(f, table_name, sep='|')
# 파일 포인터를 원래 위치로 되돌림
f.seek(original_position)
# 파일을 읽고 행 수 계산
line_count = sum(1 for _ in f)
#테이블의 총 행수를 확인
cursor.execute('SELECT COUNT(*) FROM basic_number')
table_row_count = cursor.fetchone()[0]
end_time = time.time() # 코드 블록 종료 시간 기록
# 실행 시간을 소수점 2자리까지 출력
elapsed_time = round(end_time - start_time, 2)
print(f'파일경로: {file_path} 파일 행 수: {line_count}, 테이블 행 수: {table_row_count} 실행 시간: {elapsed_time} 초', )
connection.commit()
except Exception as e:
print('Error:', e)
connection.rollback()
참고)
PostgreSQL DB 데이터 export & import
[postgresql] ERROR: invalid byte sequence for encoding "UTF8": 0xbc
[PostgreSQL] COPY 사용 불가 (SQL Error 42501)
[psycopg2] Loading and Extracting Data with Tables
https://goguri.tistory.com/391
반응형
'개발일지' 카테고리의 다른 글
[postgreSQL] 모든 테이블의 행 수(row), 열 수(column) 조회하기 (0) | 2023.09.20 |
---|---|
[linux] 사용자 추가, 비밀번호 변경, 홈 디렉터리 변경 (0) | 2023.09.18 |
[postgreSQL] 우분투(Ubuntu 20.04)에서 dbf파일 import 하기 (1) | 2023.09.14 |
[postgreSQL] 원격 서버(Ubuntu)와 pgAdmin4 연결하고 접속하기 (0) | 2023.09.14 |
[Elasticsearch] 검색 쿼리 단어 중 특정 단어에 가중치 - multi_match, match, should (1) | 2023.05.01 |
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- python'
- 지식그래프임베딩
- TextRank
- pandas
- Postgis
- PEFT
- rdflib
- writerow
- 지식그래프
- knowlegegraph
- 키워드추출
- LLM
- polars
- Vue3
- MongoDB
- vervel
- Encoding
- knowledgegraph
- difflib
- hadoop
- vscode
- p-tuing
- pdfmathtranslate
- psycopg
- ChatGPT
- Claude
- python
- cursorai
- SPARQL
- PostgreSQL
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함