簡體   English   中英

使用准備好的語句創建PostgreSQL表注釋

[英]Create PostgreSQL table comment using a prepared statement

是否可以准備Postgres的“ COMMENT ON”語句?

我有一個程序,允許用戶創建表。 我想給他們選擇添加表格內容描述的選項。 由於此數據來自用戶,因此我想使用准備好的語句。

使用Ruby和“ PG ”寶石,我使用了下面設置一個Postgres連接和數據。例如:

table_name  = "test_shakespeare"
description = "Shakespeare's sonnets"

con = PG.connect(
  :dbname   => "poefy",
  :user     => "poefy",
  :password => "poefy"
)

sql = "CREATE TABLE #{table_name} (example TEXT);"
con.exec(sql)

這是我失敗的方法,以及它們引發的錯誤。

# ERROR:  syntax error at or near "$1" (PG::SyntaxError)
sql = "COMMENT ON TABLE #{table_name} IS $1;"
con.exec(sql, [*description])

# ERROR:  syntax error at or near "$1" (PG::SyntaxError)
sql = "COMMENT ON TABLE #{table_name} IS $1;"
con.prepare("comment", sql)
con.exec_prepared("comment", [*description])

# ERROR:  could not determine data type of parameter $1 (PG::IndeterminateDatatype)
sql = "COMMENT ON TABLE #{table_name} IS '$1';"
con.exec(sql, [*description])

# ERROR:  bind message supplies 1 parameters, but prepared statement "comment" requires 0 (PG::ProtocolViolation)
sql = "COMMENT ON TABLE #{table_name} IS '$1';"
con.prepare("comment", sql)
con.exec_prepared("comment", [*description])

似乎無法為這種類型的語句做准備,因此我應該求助於SQL字符串操作。 既然如此,最好的方法是什么? 數據不是敏感數據也不是關鍵數據,我只關心正確表示的引號和撇號。

提前致謝。

我假設ruby支持與postgres相同的語句, 這是為了

任何SELECT,INSERT,UPDATE,DELETE或VALUES語句

不是COMMENT IS

看來這是不可能的。

因此,我采用了舊的“雙引號全雙引號”方法。

safe_desc = description.gsub("'", "''")
con.exec "COMMENT ON TABLE #{table_name} IS '#{safe_desc}';"

這感覺真的很hack。 但是現在我將其標記為答案。

如果有更安全的方法,請告訴我。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM