Tag: postgresql

来自Sql数据库的简单随机样本

如何在SQL中进行高效的简单随机样本? 有问题的数据库正在运行MySQL; 我的桌子至less有20万行,我想要一个简单的约10,000个随机样本。 “明显的”答案是: SELECT * FROM table ORDER BY RAND() LIMIT 10000 对于大型表来说,这太慢了:它为每一行调用RAND()(它已经把它放在O(n)),并对它们进行sorting,最好使它成为O(n lg n)。 有没有办法比O(n)更快地做到这一点? 注意 :正如Andrew Mao在注释中指出的那样,如果您在SQL Server上使用这种方法,则应该使用T-SQL函数NEWID(),因为RAND() 可能会为所有行返回相同的值 。 编辑:5年后 我再次遇到了一个更大的表,并最终使用@愚昧的解决scheme版本,有两个调整: 将行以2-5倍我所需的样本大小进行采样,以便宜的方式ORDER BY RAND() 将RAND()的结果保存到每个插入/更新的索引列中。 (如果你的数据集不是非常重要的,你可能需要find另一种方法来保持这个列的新鲜。) 要获取1000个表格的样本,我对这些行进行计数,并将结果平均采样到frozen_rand列的平均值10,000行: SELECT COUNT(*) FROM table; — Use this to determine rand_low and rand_high SELECT * FROM table WHERE frozen_rand BETWEEN %(rand_low)s AND %(rand_high)s ORDER BY […]

我如何强制Postgres使用特定的索引?

如果强制Postgres使用索引,否则会坚持进行顺序扫描?

混合字数string的人性化或自然数字sorting

在Sivaram Chintalapudi的 这个问题 之后 ,我感兴趣的是在PostgreSQL中对于包含多位数字和单词/字母混合的string进行自然的或者“人性化的”sorting “是否实用,没有固定的string中的单词和数字模式,并且string中可能有多个多位数字。 我经常看到这个事情的唯一地方就是在Mac OS的Finder中,它自然地对包含混合数字和单词的文件名进行sorting,在“3”之后放置“20”,而不是在之前。 所需的对照顺序将由一个algorithm产生,该algorithm将每个string在字母 – 数字边界处分成块,然后对每个部分进行sorting,将正常sorting和数字块的字母块视为整数来整理。 所以: 'AAA2fred'会变成('AAA',2,'fred') , 'AAA10bob'变成('AAA',10,'bob') 。 然后可以根据需要对这些进行sorting: regress=# WITH dat AS ( VALUES ('AAA',2,'fred'), ('AAA',10,'bob') ) regress-# SELECT dat FROM dat ORDER BY dat; dat ————– (AAA,2,fred) (AAA,10,bob) (2 rows) 与通常的string整理顺序相比: regress=# WITH dat AS ( VALUES ('AAA2fred'), ('AAA10bob') ) regress-# SELECT dat FROM dat […]

在Postgresql中模拟MySQL的ORDER BY FIELD()

只是第一次尝试Postgresql,来自MySQL。 在我们的Rails应用程序中,我们有一些像SQL这样的位置: SELECT * FROM `currency_codes` ORDER BY FIELD(code, 'GBP', 'EUR', 'BBD', 'AUD', 'CAD', 'USD') DESC, name ASC Postgresql不支持/不允许发现这种情况并不需要很长时间。 有没有人知道如何在Postgres中模拟这种行为,还是我们不得不拉动整理代码? 谢谢 窥视

正确的hibernate批注byte

我有一个应用程序使用hibernate3.1和JPA注释。 它有一些带有byte []属性(1k-200k大小)的对象。 它使用JPA @Lob注释,而且hibernate 3.1可以在所有主要数据库上正确读取这些数据,这似乎隐藏了JDBC Blob供应商的特性(就像它应该这样做)。 @Entity public class ConfigAttribute { @Lob public byte[] getValueBuffer() { return m_valueBuffer; } } 我们不得不升级到3.5,当我们发现,hibernate3.5 打破(并不会修复)这个注解组合postgresql(没有解决方法)。 到目前为止,我还没有find一个明确的解决scheme,但我注意到,如果我只是删除@Lob,它使用postgresqltypesbytea(工作,但只在postgres)。 annotation postgres oracle works on ————————————————————- byte[] + @Lob oid blob oracle byte[] bytea raw(255) postgresql byte[] + @Type(PBA) oid blob oracle byte[] + @Type(BT) bytea blob postgresql once you use […]

你如何findPostgres中所有表格的行数

我正在寻找一种方法来查找Postgres中所有表的行数。 我知道我可以一次做这一张桌子: SELECT count(*) FROM table_name; 但是我希望看到所有表格的行数,然后通过sorting来了解我的表格有多大。

在MySQL中相当于generate_series()

我需要做一个查询,并join一年的所有日子,但在我的分贝没有日历表。 谷歌后,我发现在PostgreSQL generate_series() 。 MySQL有类似的东西吗? 我的实际表格有这样的: date qty 1-1-11 3 1-1-11 4 4-1-11 2 6-1-11 5 但我的查询必须返回: 1-1-11 7 2-1-11 0 3-1-11 0 4-1-11 2 and so on ..

删除重复的行(不要删除所有重复的)

我正在使用postgres。 我想删除重复的行。 条件是,从一组重复行中的1个副本不会被删除。 即:如果有5个重复logging,则其中4个将被删除。

将hex文本表示转换为十进制数

我想使用PostgreSQL 9.1将hex转换为十进制 与此查询: SELECT to_number('DEADBEEF', 'FMXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'); 我得到以下错误: ERROR: invalid input syntax for type numeric: " " 我究竟做错了什么?

如何删除重复的条目?

我必须添加一个唯一的约束到现有的表。 这很好,除了表已经有数百万行了,许多行违反了我需要添加的唯一约束。 什么是删除违规行最快的方法? 我有一个SQL语句,它find重复项并删除它们,但它是永远运行。 有没有另一种方法来解决这个问题? 也许备份表,然后在添加约束后恢复?