01Explain the differences and compatibility of PostgreSQL row-level locks: SELECT ... FOR UPDATE, FOR NO KEY UPDATE, FOR SHARE, and FOR KEY SHARE. How do they differ from optimistic locking?Middleaic0