PostgreSQL ما يعادل تلميح SQLServer Nolock
-
25-09-2019 - |
سؤال
في SQLServer ، يمكنك استخدام بناء الجملة "(Nolock)" لضمان عدم قفل الجدول أو لم يتم حظره بواسطة الاستعلامات الأخرى التي تقفل نفس الجدول. على سبيل المثال
SELECT * FROM mytable (nolock) WHERE id = blah
ما هو بناء الجملة المكافئ في postgres؟ لقد وجدت بعض الوثائق على قفل الجدول في PG (http://www.postgresql.org/docs/8.1/interactive/sql-lock.html) ، ولكن يبدو كل شيء موجه إلى كيفية قفل طاولة ، لا تأكد من ذلك غير مؤمن.
المحلول
لا يقوم تحديد أي جدول في postgresql ، إلا إذا كنت تريد قفل:
SELECT * FROM tablename FOR UPDATE;
يستخدم PostgreSQL MVCC لتقليل خلاف القفل من أجل السماح بأداء معقول في بيئات متعددة. القراء لا يتعارضون مع الكتاب أو القراء الآخرين.
نصائح أخرى
لقد أجريت بعض الأبحاث ويبدو أن NOLOCK
تلميح في SQL Server تقريبًا مثل القراءة UNCOMMITTED
مستوى عزل المعاملة. في postgresql ، يمكنك ضبط READ UNCOMMITTED
, ، لكنها ترقية بصمت إلى المستوى READ COMMITTED
. READ UNCOMMITTED
غير مدعومة.
PostgreSQL 8.4 وثائق لعزل المعاملات: http://www.postgresql.org/docs/8.4/static/transaction-iso.html