Postgresql

在一台雙引導機器上共享 PostgreSQL 數據庫而不重複(跨平台)

  • April 19, 2015

我在雙引導機器上安裝了 PostgreSQL 9.4(在 Win 7 和 Ubuntu 14.10 上)。這兩個系統共享一個驅動器(NTFS 格式),其中包括一個在 Windows 下創建的 PSQL 數據庫目錄。顯然,PSQL 安裝是特定於系統的,而且它們也恰好位於不同的分區上。該驅動器在 Linux 下自動掛載,並被授予完整的讀/寫/執行權限。

我想知道是否可以在兩個系統之間共享結構和數據,而無需在每次載入新作業系統時複製和/或複制所有內容。實際上,我希望在 Windows 中創建 Ubuntu 時,所有數據都可用於 Ubuntu,反之亦然。

這是否可能,如果是這樣,假設所有數據最初都是在 Windows 下生成的,如何從 Linux 進行設置?

編輯:我嘗試執行:

sudo pg_dropcluster --stop 9.4 main

其次是

sudo pg_createcluster -d /db_from_windows_path 9.4 main

這似乎有效,但是當再次啟動伺服器時,我得到:

sudo /etc/init.d/postgresql start 
* Starting PostgreSQL 9.4 database server
* Error: could not exec /usr/lib/postgresql/9.4/bin/pg_ctl /usr/lib/postgresql/9.4/bin/pg_ctl start -D /db_from_windows_path -s -o  -c config_file="/etc/postgresql/9.4/main/postgresql.conf" :
[fail]

它看起來非常神秘,特別是因為它完全是空的,目錄/var/log/postgresql/postgresql-9.4-main.log的其餘部分也是如此/var/log/postgresql/

編輯 2:經過一番查看,我注意到 chown 沒有採取,因為 NTFS 系統顯然只能在掛載時設置。在修復 /etc/fstab 以將所有權授予 postgres 後,我得到一個不同的錯誤The PostgreSQL server failed to start. Please check the log output.再次導致沒有日誌,所以我執行:

/usr/lib/postgresql/9.4//bin/postgres -d 5 -D /var/lib/postgresql/9.4/main -c config_file=/etc/postgresql/9.4/main/postgresql.conf

這給了這個:

LOG:  invalid value for parameter "dynamic_shared_memory_type": "windows"
HINT:  Available values: posix, sysv, mmap, none.
2015-04-17 12:38:43 BST [3653-3] LOG:  invalid value for parameter "lc_messages": "English_United Kingdom.1252"
2015-04-17 12:38:43 BST [3653-4] LOG:  invalid value for parameter "lc_monetary": "English_United Kingdom.1252"
2015-04-17 12:38:43 BST [3653-5] LOG:  invalid value for parameter "lc_numeric": "English_United Kingdom.1252"
2015-04-17 12:38:43 BST [3653-6] LOG:  invalid value for parameter "lc_time": "English_United Kingdom.1252"
2015-04-17 12:38:43 BST [3653-7] FATAL:  configuration file "/etc/postgresql/9.4/main/postgresql.conf" contains errors
2015-04-17 12:38:43 BST [3653-8] DEBUG:  shmem_exit(1): 0 before_shmem_exit callbacks to make
2015-04-17 12:38:43 BST [3653-9] DEBUG:  shmem_exit(1): 0 on_shmem_exit callbacks to make
2015-04-17 12:38:43 BST [3653-10] DEBUG:  proc_exit(1): 0 callbacks to make
2015-04-17 12:38:43 BST [3653-11] DEBUG:  exit(1)

這似乎是一個完全不同的問題,也許與 POSIX 相關?

我想知道是否可以在兩個系統之間共享結構和數據,而無需在每次載入新作業系統時複製和/或複制所有內容。實際上,我希望在 Windows 中創建 Ubuntu 時,所有數據都可用於 Ubuntu,反之亦然。

你不能。只是不支持,不可能。沒辦法。PostgreSQL 不會嘗試使數據目錄可跨架構、作業系統等進行移植。

您可以做到這一點的唯一方法是當您想要訪問 Windows 數據目錄時在 Ubuntu 中執行 Windows 虛擬機,或者當您想要訪問 Linux 數據目錄時在 Windows 中執行 Linux 虛擬機。

您可能希望執行一個在兩個平台之間共享的 VM 映像,並讓它包含數據庫 - 但請注意,Linux 的 NTFS 驅動程序對性能並不好,並且在並發方面可能無法消除所有問題。 /O 所以我會有點懷疑執行類似 VM 映像的東西。FAT32 和 exFAT 不是安全的。因此,對於兩個系統可以共享以執行“實際工作”的文件系統來說,實際上並沒有任何好的選擇。

所以就個人而言…我只需要一台單獨的小型機器。或者我會保留數據庫的轉儲並在重新啟動時重新載入它。

(另外,如果在 Linux 上的 NTFS 文件系統驅動程序上執行 PostgreSQL 工作,這有點令人驚訝,我當然不會依賴它來做任何我關心的事情)。

引用自:https://dba.stackexchange.com/questions/98130