小编zer*_*rmy的帖子

Postgres表现问题

我们正在运行Postgres 9.1.3,我们最近开始在我们的一台服务器上遇到重大性能问题.

我们的查询运行了一段时间,但截至8月1日,它们已经大幅放缓.似乎大多数有问题的查询都是Select查询(带有count(*)的查询特别糟糕),但一般情况下,数据库运行速度非常慢.

我们在服务器上运行了这个查询,这些是我们对默认配置文件所做的更改(注意:之前服务器运行正常,所以,它们可能并不重要):

       name            |                                                current_setting
---------------------------+---------------------------------------------------------------------------------------------------------------
version                   | PostgreSQL 9.1.2 on x86_64-unknown-linux-gnu, compiled by  gcc (GCC) 4.1.2 20080704 (Red Hat 4.1.2-51), 64-bit
autovacuum                | off
bgwriter_delay            | 20ms
checkpoint_segments       | 6
checkpoint_warning        | 0
client_encoding           | UTF8
default_statistics_target | 1000
effective_cache_size      | 4778MB
effective_io_concurrency  | 2
fsync                     | off
full_page_writes          | off
lc_collate                | en_US.UTF-8
lc_ctype                  | en_US.UTF-8
listen_addresses          | *
maintenance_work_mem      | 1GB
max_connections           | 100
max_stack_depth           | 2MB
port                      | 5432
random_page_cost          | 2 …
Run Code Online (Sandbox Code Playgroud)

postgresql performance

12
推荐指数
2
解决办法
1万
查看次数

JQuery为选中设置了多个下拉选项

我遇到了一个有趣的小问题,可能只是我很傻.

我有一个看起来有点像这样的选择框:

<select id="dom_" name="dom_">
    <option value="1">1</option>
    <option value="2">2</option>
    <option value="3">3</option>
    <option value="4">4</option>
    ...
Run Code Online (Sandbox Code Playgroud)

选项代表一个月中的几天,最多可达31天.

现在,当加载一个带有信息的表单(用于编辑)时,我试图选择一个默认值,但我无法让它工作得很好.

我尝试使用我在以前的一些SO问题中找到的这个片段:

$("#dom_ option[value$='" + 2 + "']").attr('selected', true);
Run Code Online (Sandbox Code Playgroud)

此行运行并将第二个选项设置为选中,但它也会将其他2X或X2选项设置为已选中.例如,12和22也将被设置为选中.

但是,如果我使用这个:

$("#dom_ option").each(function()
{
    if ($(this).val() == 2)
    {
        $(this).attr('selected', true);
    }
    else
    {
        $(this).attr('selected', false);
    }

});
Run Code Online (Sandbox Code Playgroud)

然后将选择正确的选项,但SELECT不会更新该框.

我必须手动调用$("#dom_").val(2);后记来更新该框.

所以,我的问题是,为什么第一个选项不起作用,为什么第二个选项不能自动刷新?

另外,SELECT通过对象$("#dom_")和调用.val它与选择和设置selected为true 之间的区别究竟是什么?这两个都发回相同的数据POST还是GET数据?

这是一个有希望证明这一点的jsFiddle.

如果它有帮助,我使用JQuery 1.6.4但我可以在jsFiddle中的一些较新版本上重现相同的问题.

如果这个问题太简单,我道歉.在JavaScript和JQuery方面,我仍然是一个业余爱好者.

javascript jquery

5
推荐指数
1
解决办法
6696
查看次数

在PostgreSQL中存储一对多或多对多关系的最佳方法是什么?

我目前正在将开源聊天(AJAX Chat)集成到另一个项目中.现在,聊天默认只从文件中获取有效用户和有效频道,但是当你拥有一个不断变化的用户数据库时,这显然不是理想的.

所以,我想这样做,以便聊天直接从数据库加载用户和频道信息.我认为设计应该如下(如果你有不同的感受,请告诉我):

  • 我们有一些聊天频道(公共,营销等...)
  • 然后我们将小组分配到频道(如公关团队1,IT人员等......)
  • 然后我们拥有属于组的用户,并且在某些情况下直接分配给频道.

我正在考虑使用以下表格实现上述内容:

频道表:

|----|Channel_Name||Channel_ID||Groups_Assigned||Users_Assigned|----|  
|----|---Public---||-----0----||---1,2,3,4,5---||-----3,4------|----|  
.  
.  
.etc...
Run Code Online (Sandbox Code Playgroud)

注意:分配的组表包含分配给通道的组的组ID,而分配的用户包含不属于分配的组的用户的ID.

群组表:

|----|Group_Name||Group_ID||Users_Assigned|----|  
|----|---Team1--||----0---||------5,10----|----|  
.  
.  
.etc...  
Run Code Online (Sandbox Code Playgroud)

对不起画的桌子很抱歉.

现在,通过上面的实现,当用户登录时,程序将获取用户id(来自users表),然后在groups表中搜索包含用户id的所有组,最后搜索通道表对于包含组(用户所属的组)或直接分配给用户的通道的所有通道.

我的想法是可能的,但似乎有点,呃,效率低下.因为我必须以格式存储指定的ID(组和用户),所以1,2,3....我必须使用PHP explode()或其他一些可以搜索字符串的PostgreSQL函数.我很可能会存储一组数组,然后一次循环遍历它们,这对我来说似乎很慢.

或者,我可以为每个用户创建一个布尔列,但这会导致列太多,并且我不想在每次创建用户时创建新列.

那么,你们会怎么做呢?而且,如果出于某种疯狂的原因,你碰巧同意我最初的想法,那么你能帮我弄清楚如何实际编写代码来实际做到这一点.

谢谢你的时间,祝你有个美好的一天.

php sql database postgresql database-design

4
推荐指数
1
解决办法
922
查看次数

如何递增id字段的所有存储值

我有一个blocks用主键调用的表blockid.有数据开始blockid的0.现在的问题是,在另一个表中,blockid's从1开始所以,我需要得到所有的blockid'sblocks将递增1.
如何,我做到这一点?
有没有一个方便的功能来做到这一点,还是我们需要写一个?或者,我是否必须手动更改它(这不会花费太长时间,但有超过100行,所以,如果我不必这样做,我更喜欢它).

谢谢你的一切.

sql postgresql

3
推荐指数
1
解决办法
2424
查看次数

我很难理解CherryPy中的会话

我最近开始了一个将我们的web应用程序从apache + Mod_python迁移到cherry-py的项目.

我仍然需要做很多事情,但是现在,CherryPy的会议给我带来了一些麻烦.

我的第一个问题是它们是如何工作的?

在Mod_python中,我们执行以下操作:

...
from mod_python import Session
sess = Session.Session(req, timeout = 60*60, lock=0)
#req is the request page object.
Run Code Online (Sandbox Code Playgroud)

从CherryPy文档来看,启动会话所需要做的就是通过添加如下内容来修改配置:

cherrypy.config.update({
    'tools.sessions.on': True, 
    'tools.sessions.storage_type': 'ram'})
Run Code Online (Sandbox Code Playgroud)

以上默认为60分钟的时间(虽然您可以手动设置自己的),但是如果我想销毁该会话并创建一个新会话呢?做,我打电话给cherrypy.lib.sessions.expire()任意文件然后再做cherrypy.config.update一次?或者,CherryPy会自行创建一个新会话吗?如果我想使用不同的到期时间进行新会话怎么办?

注意:当我说任意文件时,我的意思是一个没有运行CherryPy的文件(我的"配置"文件导入并从我们的其他页面获取html,就像Mod_Python附带的标准Publisher一样).

我尝试制作一个快速的小测试文件:

import cherrypy
from cherrypy.lib import sessions

def index(sid=0, secret=None, timeout=30, lock=1):
    cherrypy.session['test'] = 'test'
    cherrypy.lib.sessions.expire()
    return cherrypy.session.get('test','None')
Run Code Online (Sandbox Code Playgroud)

最终结果是"测试"仍显示在屏幕上.是否发生这种情况是因为客户端会话已过期,但本地会话仍有数据?在这种情况下,我如何检查会话是否过期?

抱歉这个令人困惑的问题,但我很困惑.

感谢你的帮助!

python cherrypy

3
推荐指数
1
解决办法
6916
查看次数

我可以等效地处理Varbinary和bytea字段吗?

我将一个mysql DB移动到Postgres,但是有些表有一个varbinary(16)字段(用于存储IP地址).

Postgres不支持varbinary字段,经过一些研究,我发现Postgres等价bytea.

所以,我继续将表格bytea作为ip列的字段类型.

现在,我不确定,但这可能会给我带来麻烦.

所以,现在我的问题是,如果byteavarbinary完全可以等同或不被处理.例如,如果原始MySQL查询是:

 INSERT INTO messages(userID, userName, userRole, dateTime, ip, text)
 Values('21212111','bot','4',NOW(), inet_pton($ip), 'hi');
Run Code Online (Sandbox Code Playgroud)

注意:我在那里包含了一些php,因为我的日志没有显示插入的ip地址是什么(它是blob/something)

现在,如果它是一个bytea字段,这个查询是否会存储完全相同的数据?我会推测是的,但对于一个select语句也是如此吗?
即会,这个查询无论IP字段是否返回相同的数据varbinarybytea

SELECT userID, userName, userRole, channel ,ip FROM table
Run Code Online (Sandbox Code Playgroud)

谢谢你的时间,祝你有个美好的一天.

php mysql postgresql varbinary

2
推荐指数
1
解决办法
3081
查看次数

将MySQL查询转换为PostgreSQL

我有这个问题:

DROP TABLE IF EXISTS tmp_table;
CREATE TEMPORARY TABLE tmp_table(id int primary key) 
IGNORE (
   SELECT user2role.userid AS userid
     FROM user2role 
    INNER JOIN users ON users.id=user2role.userid 
    INNER JOIN role ON role.roleid=user2role.roleid 
    WHERE role.parentrole like 'H1::H2::H3::H4::H5::%') 
UNION (
   SELECT groupid
     FROM groups
    WHERE groupid IN (2,3,4));
Run Code Online (Sandbox Code Playgroud)

此查询最初是用MySQL编写的,而不是使用DROP TABLE IF EXISTSIF NOT EXISTS.我改变了这一部分,但我不知道该怎么办IGNORE.

首先,正在IGNORE做什么?

我试图寻找PostgreSQL等价物,但它们似乎都涉及复杂的程序.我必须为此编写程序吗?如果我必须写一个,它会是什么样子?我可以IGNORE使用一些PHP代码来模拟吗?(SQL查询由PHP生成.)

mysql sql postgresql

0
推荐指数
1
解决办法
1053
查看次数

我无法让这个看似简单的插入查询工作

家伙.我有一个查询,旨在从一个表中获取结果并将其插入另一个表.它看起来像这样:

INSERT INTO minutes_deleted 
    SELECT * FROM minutes
    WHERE minutes_id = 103
Run Code Online (Sandbox Code Playgroud)

现在,我甚至不知道你可以尝试插入那样的东西.(我认为插入语句都有语法INSERT INTO blah VALUES (some values),但在阅读手册后我发现你可以.

现在,问题在于这会产生错误:column "meeting_id" is of type integer but expression is of type character varying我认为发生此错误是因为列的minutes_deleted顺序与其中的顺序不同minutes_id.

minutes_deleted还有一些找不到的minutes列,但是所有列minutes都可以找到minutes_deleted,但是在混乱的顺序中.

根据手册,表中包含填充内容的所有列(即minutes_deleted必须给出一个值,如果我可以通过列顺序,查询可能仍会因此而失败.

那么,如果您愿意,可以提出以下两个简

1) - 我如何重新排列列的顺序,所以它的工作原理.
2) - 如何为minutes_deleted不存在的列指定空值minutes

非常感谢你的帮助.

sql postgresql

0
推荐指数
1
解决办法
128
查看次数