2013-05-15 153 views
0

我可以成功創建PostgreSQL數據庫的虛擬硬盤。無法創建Postgresql數據庫

該命令是成功的:

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

其中DBPATH是ramdisk上的目錄。
這裏:

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

我得到這個錯誤:

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 

我無法理解這樣的錯誤。虛擬磁盤剛剛創建,它是空的,其大小爲50 MB。新創建的數據庫也是空的。爲什麼消息「設備上沒有空間」?

謝謝。

回答

2

哎呀,請不要這樣做。

表空間不是可以隨時離開並讓數據庫的其餘部分保持開心的狀態。如果丟失了表空間,將會丟失整個數據庫。關於ramdisk的表空間是非常不安全的。

對於不需要耐久性的數據,請使用UNLOGGEDTEMPORARY表。

如果你的整個數據庫是一次性的,而不是創建ramdisk上一個表,你應該ramdisk上initdb一個全新的DB,如果你需要。你可能會發現this post有用。

+0

你說服了我,特別是考慮到只有某些表應該放在ramdisk上。如果我使用UNLOGGED或TEMPORARY表,我能確定他們不會碰SSD嗎?我想防止將它用於臨時數據,這些數據會被每秒多次覆蓋。 – Pietro

+1

@Pietro所以你最關心的是SSD的磨損?如果是這樣,你不僅要考慮表格本身,還要考慮預寫日誌。 'unlogged'或'temporary'表格大多會避免WAL,所以這很有幫助。如果使用未記錄/臨時表,您仍然可以獲得磁盤寫入,但不會「每秒多次」,因爲沒有任何操作會強制它們刷新到磁盤。操作系統會將它們緩衝在RAM中,並且只有在內存壓力強制它們時才寫出來,特別是當你在'postgresql.conf'中設置'fsync = off'時。所有這些選項都可以讓PostgreSQL在數據丟失或服務器崩潰時丟棄數據(數據丟失)。 –

+0

Craig,我錯了,或者我可以用我的需求創建一個表的唯一方法是限制在這個表中:CREATE TEMPORARY TABLE table_name(...)'?其他一切似乎都與整個數據庫相關,而不是表格。 – Pietro