2016-08-24 78 views
0

我有一個問題,我無法解決。我正在使用YAML將CSV加載到gpdb表。我想避免硬編碼數據庫登錄細節(主機,ID,密碼)。 YAML不支持包含或導入選項。如何將存儲在第二個文件中的憑證連接或調用到用於執行的YAML腳本的正確位置?如何避免在yaml中爲gpload硬編碼登錄憑證

--- 
VERSION: 
DATABASE: dbname  # <- these should be dynamic 
USER: user    # <- 
PASSWORD: itsasecret # <- 
HOST: server_address # <- 
PORT: 1234    # <- 
GPLOAD: 
    input... 
    output... 
+0

我不知道爲什麼你在'DATABASE'之前放**',這使得你的YAML文件無效,因爲'*'應該引入一個別名,並且別名不能以'*'開頭。 – Anthon

+0

安森,感謝您的評論。我試圖用粗體或斜體來突出它。出於某種原因,它不會以這種方式顯示: - | – wizengeeky

+0

你不能在縮進的代碼段中加粗,這就是全部「文字」。但是你可以在YAML中發表評論以指出需要強調的內容。 – Anthon

回答

1

您可以致電gpload命令行參數指定的主機和用戶,並讓他們走出YAML文件本身的:

gpload -f yourfile.yml -h database_server_name -U user_login_name 

您可以設置密碼爲:

$PGPASSWORD環境變量,其中包含密碼
$PGPASSFILE環境變量指向具有該用戶密碼的文件 將登錄信息置於.pgpass

如果您不想將它存儲在某個文件中,可以在命令行中添加-W以強制密碼提示。

+0

謝謝吉姆!我忘記了pgpass。我正在使用gpload和ETL工具,而不是通過psql。這由正在使用我的功能ID來部署作業的DBA來操作。有沒有辦法將其納入yaml文件?我讀過PyYaml有一個使用方法!include x.yaml,對我來說似乎更乏味。有什麼想法嗎? – wizengeeky

+0

我不知道有什麼方法將東西包含在我們使用的YAML文件中。您應該能夠將用戶和主機嵌入到YAML文件中。如果該用戶在系統上通過pg_hba.conf進行了驗證,並且在.pgpass中有用戶條目,則應該讓您進入。一般來說,使用gpload的ETL工具(如Informatica或AbInitio)將具有設置的特定ETL角色數據庫和pg_hba.conf用於所有要作爲登錄的ETL作業。我處理的大多數客戶都使用這種模式。 –