2013-05-15 3 views
0

PostgreSQL 데이터베이스 용 램 디스크를 성공적으로 생성 할 수 있습니다.PostgreSQL 데이터베이스를 생성 할 수 없습니다.

이 명령은 성공 : DBPATH가 램 디스크의 디렉토리입니다

psql --host=localhost --command "CREATE TABLESPACE $db_tblspace LOCATION '$dbPath';" 

. 여기
는 :

CREATE DATABASE pgdb TABLESPACE pgdb_tblspace; 
createdb: database creation failed: ERROR: could not write to file "pg_tblspc/24597/PG_9.2_201204301/24598/12027": No space left on device 

나는이 오류를 이해할 수 없다 :

createdb $dbName --tablespace=$db_tblspace --host=localhost --no-password --echo 

나는이 오류가 발생합니다. 램 디스크는 방금 생성되었으며 비어 있으며 크기는 50MB입니다. 새로 생성 된 데이터베이스도 비어 있습니다. 왜 "장치에 남은 공간이 없습니까?"라는 메시지가 나타나는 이유는 무엇입니까?

감사합니다.

답변

2

Yikes, 제발하지 마세요.

테이블 스페이스는 그냥 사라져 데이터베이스의 나머지 부분을 행복하게 유지할 수있는 것이 아닙니다. 테이블 공간을 잃어 버리면 전체 데이터베이스가 손실됩니다. 램 디스크의 테이블 스페이스는 매우 안전하지 않습니다.

내구성이 요구되지 않는 데이터의 경우 UNLOGGED 또는 TEMPORARY 테이블을 사용하십시오.

전체 데이터베이스를 폐기하는 경우라면 램 디스크에 테이블 스페이스를 만드는 대신에 initdb 램 디스크에 완전히 새로운 DB를 만들어야합니다. this post이 유용 할 수 있습니다.

+0

당신은 저를 확신했습니다. 특히 특정 테이블 만 램 디스크에 있어야한다는 것을 확신했습니다. UNLOGGED 또는 TEMPORARY 테이블을 사용하는 경우 SSD를 만지지 않을 수 있습니까? 몇 초에 여러 번 덮어 쓸 임시 데이터를 사용하지 못하게하고 싶습니다. – Pietro

+1

@ 피에트로 그래서 당신의 주요 관심사는 SSD 착용입니까? 그렇다면 테이블 자체뿐만 아니라 미리 쓰기 로그에 대해서도 생각해야합니다. 'unlogged' 또는'temporary' 테이블은 대부분 WAL을 피할 것이므로 도움이됩니다. 기록되지 않은/임시 테이블을 사용하면 디스크 쓰기가 발생하지만 "여러 번 1 초"가 아닌 경우 디스크에 플러시하지 않아도됩니다. OS는 그것들을 RAM에 버퍼링 할 것이고, 메모리 압박이 가해질 때만 그들을 쓰게 될 것이다. 특히'postgresql.conf'에'fsync = off'를 설정하면됩니다. 이러한 모든 옵션을 사용하면 PostgreSQL은 서버 또는 서버가 중단 될 때 데이터를 손실 (데이터 손실)시킬 수 있습니다. –

+0

Craig, 나 틀렸어, 아니면이 같은 테이블에 제한된 나의 요구 사항으로 테이블을 만들 수있는 유일한 방법은 : CREATE TEMPORARY TABLE table_name (...)'? 다른 모든 것은 테이블과 관련이없는 전체 데이터베이스와 관련이있는 것으로 보입니다. – Pietro