pg_dump를 사용하여 데이터베이스 내의 한 테이블에서만 삽입 문을 가져옵니다.


121

PostgreSQL에서 INSERT사용하는 데이터베이스 내의 특정 테이블에서 모든 행을 명령문 으로 가져 오는 방법을 찾고 pg_dump있습니다.

예를 들어, 테이블 A가 있고 테이블 AI의 모든 행이 INSERT명령문으로 필요 합니다. 또한 해당 명령문을 파일에 덤프해야합니다.

이게 가능해?

답변:


229

버전이 8.4.0 미만인 경우

pg_dump -D -t <table> <database>

처음에 테이블을 설정하는 CREATE TABLE 등없이 INSERT 만 원하는 경우 -a앞에 추가하십시오 -t.

버전> = 8.4.0

pg_dump --column-inserts --data-only --table=<table> <database>

58
-d 및 -D 옵션은 PostgreSQL 8.4에서 제거되었습니다 (8.4.0 릴리스 정보 참조). 이제 "긴"이름을 사용해야합니다. pg_dump --column-inserts --data-only --table = <table> <database>
Matthew Wood

1
하지만 -d, -a-t짧은 버전은 여전히 ​​존재합니다. PG11로 확인했습니다.
demisx

--inserts또 다른 옵션입니다. 그것은 약간 빠른 복원하지만 열 순서 변경을 용인 할 수 없다
앤디

34

.sql 파일에 삽입을 DUMP하려면 다음을 수행 하십시오.

  1. cd.sql파일을 저장 하려는 위치로
  2. pg_dump --column-inserts --data-only --table=<table> <database> > my_dump.sql

> my_dump.sql명령에 유의하십시오 . 이것은 모든 것을 my_dump 라는 SQL 파일에 넣습니다.


2

내가 좋아하는 스크립트에 넣으십시오.

#!/bin/bash
set -o xtrace # remove me after debug
TABLE=charge_unit
DB_NAME=prod_sit_entities_db

BASE_DIR=/var/backups/someDir
LOCATION="${BASE_DIR}/myApp_$(date +%Y%m%d_%H%M%S)"
FNAME="${LOCATION}_${DB_NAME}_${TABLE}.sql"

# Create backups directory if not exists
if [[ ! -e $BASE_DIR ]];then
|       mkdir $BASE_DIR
|       chown -R postgres:postgres $BASE_DIR
fi

sudo -H -u postgres pg_dump --column-inserts --data-only --table=$TABLE $DB_NAME > $FNAME
sudo gzip $FNAME

1

원격 액세스를 사용하고 모든 데이터베이스 데이터를 덤프하려는 경우 다음을 사용할 수 있습니다.

pg_dump -a -h your_host -U your_user -W -Fc your_database > DATA.dump

모든 데이터베이스 데이터로 덤프를 생성하고

pg_restore -a -h your_host -U your_user -W -Fc your_database < DATA.dump

동일한 구조를 가지고 있다는 것을 고려하여 데이터베이스에 동일한 데이터를 삽입하려면

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.