2016-08-24 45 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作业。我处理的大多数客户都使用这种模式。 –