很少,我遇到一个问题,我插入表Tbl_CUSTOMER
的记录是Postgres的自动ID的两倍。
我不知道,但我怀疑它可能是由postgres真空运行时间造成的。为了确认这一点,我试图在插入记录的同时运行postgres vacuum,但是没有发现这个问题发生,因此,我无法复制问题以找出根本原因并解决问题。
models.朋友
class Tbl_CUSTOMER():
ID = db.Column(db.Numeric(25, 9), primary_key=True, autoincrement=True)
PotentialCustomer = db.Column(db.String(12))
FirstNameEn = db.Column(db.String(35))
LastNameEn = db.Column(db.String(35))
FirstNameKh = db.Column(db.String(35))
LastNameKh = db.Column(db.String(35))
Salutation = db.Column(db.String(4))
Gender = db.Column(db.String(6))
DateOfBirth = db.Column(db.String(10))
CountryOfBirth = db.Column(db.String(2))
Nationality = db.Column(db.String(2))
ProvinceOfBirth = db.Column(db.String(3))
views.朋友
dataInsert =Tbl_CUSTOMER(
PotentialCustomer = request.form['PotentialCustomer'],
FirstNameEn = request.form['FirstNameEn'],
LastNameEn = request.form['LastNameEn'],
FirstNameKh = request.form['FirstNameKh'],
LastNameKh = request.form['LastNameKh'],
Salutation = request.form['Salutation'],
Gender = request.form['Gender'],
DateOfBirth = request.form['DateOfBirth'],
CountryOfBirth = request.form['CountryOfBirth'],
Nationality = request.form['Nationality'],
ProvinceOfBirth = request.form['ProvinceOfBirth']
)
db.session.add(dataInsert)
db.session.commit()
这个问题不经常发生。那么,问题是什么,如何解决这个问题以防止将来发生?谢谢。
如果使用基于行的所有值的某个散列函数值创建唯一键(或替换主键),则可以帮助您查看何时发生此问题。使用此散列列,您将能够决定在系统获得相同值(相同散列值)时应该发生什么。例如,一个选项只是忽略新行,保留旧行。其他,是重写等
从不同行获取相同哈希值的可能性非常小,我甚至不会考虑这一点。看看这个帖子https://crypto.stackexchange.com/questions/1170/best-way-to-reduce-chance-of-hash-collisions-multiple-hashes-or-larger-hash,如果你想看到更多细节。