我有一个PostgresDB,在一个表中我有服务器IP,现在我想带一堆工作人员去检查我的数据库中的服务器。但我想确保没有两个工作人员获得相同的服务器IP,因此一旦选择了一个IP,它就不能用于所有其他工作人员。
{
"name": "papp",
"author": "Ionic Framework",
"homepage": "http://ionicframework.com/",
"private": true,
"scripts": {
"build": "ionic-app-scripts build",
"watch": "ionic-app-scripts watch",
"serve:before": "watch",
"emulate:before": "build",
"deploy:before": "build",
"build:before": "build",
"run:before": "build"
},
"dependencies": {
"@ionic/storage": "^1.0.3",
"crypto-js": "^3.1.6",
"ionic-angular": "^2.0.0-rc.0",
"ionic-native": "^2.0.3",
"ionicons": "^3.0.0",
"ng2-translate": "^3.1.0",
"@ionic/app-scripts": "latest",
"typescript": "^2.0.3"
},
"devDependencies": {
},
"description": "papp: An Ionic project",
"cordovaPlugins": [
"cordova-plugin-device",
"cordova-plugin-console",
"cordova-plugin-whitelist",
"cordova-plugin-splashscreen",
"cordova-plugin-statusbar",
"ionic-plugin-keyboard"
],
"cordovaPlatforms": []
}
有谁能请我指出如何实现这个目标的好方向?
据我所知,常规锁定不会,因为它只适用于插入,更新,删除,我所做的就是选择。
也许有一种方法可以一步到位地选择和更新,但我还没有发现任何与之相关的内容。 所以这里的一些帮助将不胜感激。
由于
答案 0 :(得分:0)
您可以使用UPDATE ... RETURNING
,如以下示例所示:
UPDATE iptable
SET processed = TRUE
WHERE id IN (SELECT id FROM iptable
WHERE NOT processed
LIMIT 1)
RETURNING ip_adress;
此处id
是主键
部分索引ON iptable(id) WHERE NOT processed
可能会加快查询速度。
或者,您可以在一个交易中使用SELECT ... FOR UPDATE
和UPDATE
:
START TRANSACTION;
SELECT id
FROM iptable
WHERE NOT processed
LIMIT 1
FOR UPDATE;
UPDATE iptable SET processed = TRUE WHERE id = ...;
COMMIT;