Espaços reservados (por exemplo,
$1
, $2
, ...) são para valores. Um nome de banco de dados (ou nome de tabela, nome de coluna, ...) é um identificador. Isso é semelhante à diferença entre o nome de uma variável e o valor que a variável mantém em Ruby. Se você precisar inserir dinamicamente um identificador em algum SQL, precisará usar a interpolação de string e o propósito especial
quote_ident
para certificar-se de citá-lo corretamente. Então algo mais assim:db_name = conn.quote_ident(db_name)
res = conn.exec("CREATE DATABASE #{db_name}")