Quote the database and user strings when altering databases.
[chef.git] / cookbooks / postgresql / providers / database.rb
index eee79031d4004297c050fb9ba5563a2a5c9c534d..a63197afe63325dd2bd8b027fa3d605134beaa65 100644 (file)
@@ -26,17 +26,19 @@ def load_current_resource
   if pg_database = @pg.databases[@current_resource.database]
     @current_resource.owner(pg_database[:owner])
     @current_resource.encoding(pg_database[:encoding])
+    @current_resource.encoding(pg_database[:collate])
+    @current_resource.encoding(pg_database[:ctype])
   end
   @current_resource
 end
 
 action :create do
   unless @pg.databases.include?(new_resource.database)
-    @pg.execute(:command => "CREATE DATABASE #{new_resource.database} OWNER #{new_resource.owner} ENCODING '#{new_resource.encoding}'")
+    @pg.execute(:command => "CREATE DATABASE \"#{new_resource.database}\" OWNER \"#{new_resource.owner}\" TEMPLATE template0 ENCODING '#{new_resource.encoding}' LC_COLLATE '#{new_resource.collation}' LC_CTYPE '#{new_resource.ctype}'")
     new_resource.updated_by_last_action(true)
   else
     if new_resource.owner != @current_resource.owner
-      @pg.execute(:command => "ALTER DATABASE #{new_resource.database} OWNER TO #{new_resource.owner}")
+      @pg.execute(:command => "ALTER DATABASE \"#{new_resource.database}\" OWNER TO \"#{new_resource.owner}\"")
       new_resource.updated_by_last_action(true)
     end
   end
@@ -44,7 +46,7 @@ end
 
 action :drop do
   if @pg.databases.include?(new_resource.database)
-    @pg.execute(:command => "DROP DATABASE #{new_resource.database}")
+    @pg.execute(:command => "DROP DATABASE \"#{new_resource.database}\"")
     new_resource.updated_by_last_action(true)
   end
 end