我有一个需要在多个大表上执行长时间更新的函数.在更新期间,一次需要将2-3个表锁定在EXCLUSIVE模式下.
由于并非所有表都需要同时锁定,理想情况下我只想锁定那些我当时正在更新的表,然后在我完成后删除锁.
例如.
-- Lock first pair of tables
LOCK TABLE tbl1_a IN EXCLUSIVE MODE;
LOCK TABLE tbl1_b IN EXCLUSIVE MODE;
-- Perform the update on tbl1_a and tbl1_b
-- Release the locks on tbl1_a and tbl1_b
-- HOW???
-- Proceed to the next pair of tables
LOCK TABLE tbl2_a IN EXCLUSIVE MODE;
LOCK TABLE tbl2_b IN EXCLUSIVE MODE;
Run Code Online (Sandbox Code Playgroud)
不幸的是,在plpgsql中没有等效的UNLOCK语句.删除LOCK的常规方法是COMMIT事务,但这在函数内部是不可能的.
这有什么解决方案吗?在函数完成之前显式释放锁的某种方法?或者运行某种子事务(也许通过在单独的函数中运行每个更新)?
UPDATE
我接受了没有解决方案.我将每个更新写入一个单独的函数并从数据库外部进行协调.感谢大家.
我现在较少的组织如下:
styles/pages/page1/index.less
styles/pages/page1/tab1.less
...
styles/widgets/widget1.less
styles/widgets/widget2.less
...
styles/tools/partials.less
...
styles/app.less
Run Code Online (Sandbox Code Playgroud)
我的app.less文件的全部内容都是@import
带来所有其他部分的语句.
@import "tools/partials";
@import "widgets/widget1";
@import "widgets/widget2";
@import "pages/page1/index";
@import "pages/page1/tab1";
//...
Run Code Online (Sandbox Code Playgroud)
这些语句是手动维护的,这很糟糕.有没有更好的办法?
我梦想着这样的事情:
@import "tools/partials";
@import "widgets/*";
@import "pages/**/*";
Run Code Online (Sandbox Code Playgroud)
也许某种脚本在编辑器级别上处理这个问题(使用WebStorm)?或者为编译器本身提供某种插件?
现在我在我的应用程序中使用快速中间件提供较少的文件,但如果有解决方案,我可以轻松切换到grunt.
我想要在issue/:id/edit
路线上显示一个复杂的表格.我可以显示所需内容的唯一方法是使用多个标签.请参阅附带的草图以使情况更清晰:
那么使用Ember框架实现这一目标的"规范"方法是什么?
我的第一次尝试是这样的:
因此,所有数据都被加载并绑定到单个tickets/:id/edit
路由和控制器.我使用partials来加载不同的标签.
这起初工作正常.然而随着应用程序的增长,单个控制器变得太小而无法处理所有事情.有几十个属性,没有明确的指示什么是常见的,什么属于单个页面.因此,我决定我需要一些方法将各个标签的逻辑分解为他们自己的"事物".
每个选项卡都有自己的路由和控制器.所有数据都加载到基本/tickets/:id/edit
路径中,所有子路径都从那里"借用"他们需要的东西.
setupController: function (controller, models) {
var ticket = this.modelFor("ticketEdit").ticket;
controller.set("model", ticket );
}
Run Code Online (Sandbox Code Playgroud)
其中一条子路线的示例
我已经实现了这一点,我已经在努力解决问题了.我需要阻止人们访问裸/edit
路线.我需要阻止页面导航结束浏览器历史记录.我需要调整我的面包屑和其他小部件.
我可以自己解决所有这些问题(这不是问题的重点),但我不确定这是值得的.最重要的是,路线模式并不适合我需要的东西.所以在我把更多的时间扔到河边之前,我想我最好停下来想想是否有更好的模式.
想到两个候选人.
所以我可以为每个选项卡创建一个单独的视图.他们都会分享TicketEditController
,但我可以用一些自定义的东西打包它们,这样我就可以减轻公共控制器的负担.
缺点:它使水变得混乱.我需要显示的一些小部件是视图本身,可能希望从控制器实例化.当我开始在视图中的视图中添加视图时,不确定这将如何缩放.
不过,到目前为止,这似乎是最合适的.但我错过了什么吗?是否值得放弃路线模式?
与视图类似.技术上可行,但需要对许多小部件进行重大重构,这些小部件假设他们可以直接访问共享控制器.但这种方法有很大的好处吗?不确定.
???
所以这就是你进来的地方.
如何在discord.js中使用message.channel.send正确标记用户?
这是我的代码:
function replaceAll(str, find, replacer) {
return str.replace(new RegExp(find, 'g'), replacer);
}
Bot.on('message', (message) => {
var mcontent = message.content;
var mauth = message.author;
var mtag = mauth.tag;
if (mcontent.includes("@p")) {
var newmsg = replaceAll(mcontent, "@p", "@" + mtag);
message.delete();
message.channel.send(newmsg);
});
Run Code Online (Sandbox Code Playgroud)
并且,它显示以下内容:(顺便说一句,我是hieyou1#6009)[带有message.delete(); 禁用]
执行时没有控制台日志。
我有一个自定义按钮组件,如下所示(简化):
@Component({
selector: 'my-button',
template: `
<button (click)="handleClick($event)">
<ng-content></ng-content>
</button>
`
})
export class MyButtonComponent {
@Output() public onClick: EventEmitter<Event> = new EventEmitter();
handleClick(e) {
this.onClick.emit(e);
}
}
Run Code Online (Sandbox Code Playgroud)
该按钮的正常用例是用户附加一个onClick
处理程序。但是,有些用户希望使用按钮作为链接,如下所示:
<my-button [routerLink]="'/dashboard'">Go to dashboard</my-button>
Run Code Online (Sandbox Code Playgroud)
在这种情况下我想做的是将渲染my-button
为<a>
元素而不是文字<button>
。但为了做到这一点,我需要检测用户已将指令附加[routerLink]
到它。
有什么办法可以做到这一点吗?
我知道我可以添加一个布尔@Input()
属性来将渲染切换到<a>
模式,但这感觉很笨拙。
javascript ×2
node.js ×2
angular ×1
discord.js ×1
ember.js ×1
express ×1
gruntjs ×1
less ×1
memory ×1
performance ×1
plpgsql ×1
postgresql ×1
sql ×1
webstorm ×1