2016-07-15 112 views
0

我打算在Heroku上部署我的應用程序,爲此我在那裏創建了一個數據庫。由於Hibernate的選項hibernate.hbm2ddl.auto=create沒有工作,我手動編寫了一個SQL查詢。直到我試圖將BLOB插入到數據庫時,一切都很順利。Heroku PostgreSQL BLOB插入失敗

我有一個表photo

CREATE TABLE photo (
    id  SERIAL PRIMARY KEY, 
    content BYTEA 
); 

和我做這樣的插入查詢:

INSERT INTO photo (content) VALUES (pg_read_file('./files/images/01_Tomato-Soup.jpg')::BYTEA); 

這一步後,我得到一個錯誤:

[2016-07-15 18:57:01] [42501] ERROR: must be superuser to read files 

的插入其他實體也失敗,因爲他們有一個photo表的外鍵。

這個錯誤是關於什麼的,可以在Heroku數據庫中插入BLOB而不是超級用戶?

回答

1

服務器端文件訪問僅限於超級用戶,因爲它使用服務器的文件權限運行。如果你可以讀取文件,例如讀取數據庫文件並存儲它。你可以通過寫入破壞數據。

服務器上的文件訪問功能因此相對受限於管理操作等。對於你的應用程序,你想做一些不同的事情。對於bytea,可以使用任何客戶端庫來進行轉義。這將取決於語言(Perl,PHP,Java等不同)。

有一點需要注意的是,bytea字段的轉義和迴避需要相當多的RAM,因此可能需要RAM的8倍或更多倍,而文件很大。所以這只是一件需要考慮的事情。

+0

你的意思是我需要將字節數組轉換爲字符串?我使用Java。那麼在Heroku的數據庫中存儲「BYTEA」是不可能的? – DimaSan

+0

查看jdbc文檔;-) https://jdbc.postgresql.org/documentation/80/binary-data.html –

+0

我曾與之合作過的每個驅動程序都可以爲您進行轉換。 JDBC也不例外。 –