假设两个并发事务在Postgresql DB上执行以下查询:
交易A:
SELECT * FROM mytable WHERE id IN (1, 2, 3, 4) FOR UPDATE
Run Code Online (Sandbox Code Playgroud)
交易B:
SELECT * FROM mytable WHERE id IN (6, 3, 2, 1) FOR UPDATE
Run Code Online (Sandbox Code Playgroud)
由于Postgresql以不一致的顺序获取行锁,是否可能发生死锁?例如,如果Postgresql按照此示例中给出的id的顺序获取行锁,则可能存在死锁.
或者Postgresql内部是否足够智能,以便始终SELECT FOR UPDATE以同一个表上的同时离散语句不会相互死锁的方式获取行锁(例如,始终按主键顺序获取行锁)?
如果PostgreSQL的不自动防止此类死锁的发生,是否有修改,以防止这种情况的查询方式(例如,如果事实上PostgreSQL的收购顺序行锁被赋予的标识,并始终如一地分拣ID应该防止死锁)?
谢谢你的帮助!
TL; DR Facebook javascript SDK无法确定直接从facebook.com下面注销的用户的准确登录状态.
我正在使用javascript SDK开发一个Facebook应用程序进行身份验证.我注意到,当用户直接退出Facebook(在facebook.com上)时,SDK无法理解用户在应用页面上的登录状态.我把它归结为以下简单的测试用例.
在一个选项卡中登录facebook.com.在另一个选项卡中,渲染下面的应用页面(根据需要替换MY_APP_ID).如果您以从未授予此应用程序权限的用户身份登录Facebook,请单击"登录"并授予他们.无论哪种方式,您都应该看到一些事件触发,表明您已登录.
现在,回到facebook.com标签上,退出facebook.转到应用程序选项卡,然后单击所有按钮("登录"除外)并查看浏览器控制台输出.
什么时候FB.logout被召唤,什么都没发生 永远不会调用回调.在Chrome中,出现以下错误:"不安全的JavaScript尝试使用URL http://www.facebook.com/从框架http://my_app.com访问框架.域,协议和端口必须匹配."
当FB.getLoginStatus被调用时,响应说"连接"和具有authResponse对象.但这没有用,因为它现在不正确.相反,如果为"force"参数传入true,则不会发生任何事情(永远不会调用回调).
当FB.getAuthResponse被调用时,没有任何反应(回调永远不会调用).
在任何此类事件中(在退出facebook之后)都没有触发任何相关事件.
那么问题是在这种情况下似乎没有可能从SDK合法地确定用户的登录状态.或者我做了一些愚蠢的事情,尽管我把它煮到了最低限度.
我的最终目标是,如果用户在退出facebook后点击我的注销按钮,我希望能够在这种情况下做一些事情.但SDK没有提供实现这一目标的可行方法.
任何想法或想法?有没有其他人经历过这个并找到了解决方法?谢谢!
简单的应用页面:
<html lang='en' xml:lang='en' xmlns='http://www.w3.org/1999/xhtml' xmlns:fb='http://www.facebook.com/2008/fbml'>
<head>
</head>
<body>
<script>
window.fbAsyncInit = function() {
function subFBEvent(name) {
FB.Event.subscribe(name, function(r) {
console.log(name);
console.log(r);
});
}
subFBEvent('auth.login');
subFBEvent('auth.logout');
subFBEvent('auth.authResponseChange');
subFBEvent('auth.statusChange');
FB.init({
appId : 'MY_APP_ID',
status : true, // check login status
cookie : true, // enable cookies to allow the server to access …Run Code Online (Sandbox Code Playgroud)