Marcadores de posición (es decir, $1
, $2
, ...) son para valores. Un nombre de base de datos (o nombre de tabla, nombre de columna, ...) es un identificador. Esto es similar a la diferencia entre el nombre de una variable y el valor que tiene la variable en Ruby.
Si necesita insertar dinámicamente un identificador en algún SQL, entonces necesita usar la interpolación de cadenas y el propósito especial quote_ident
método para asegurarse de citarlo correctamente. Así que algo más como esto:
db_name = conn.quote_ident(db_name)
res = conn.exec("CREATE DATABASE #{db_name}")