# File lib/flexirecord.rb, line 1186
1186:     def save
1187:       # TODO: improve efficiency, when a "REPLACE" command is available in PostgreSQL
1188:       transaction(:read_committed) do
1189:         self.class.lock(:share_row_exclusive)
1190:         @saved =
1191:           self.class.select_by_value_set(self.class.primary_columns, [self.class.primary_columns.collect { |column| self.read(column) }]).length > 0
1192:         copy_primary_key
1193:         if self.void
1194:           return destroy
1195:         else
1196:           return super
1197:         end
1198:       end
1199:     end