小编Erw*_*ter的帖子

Rails和PostgreSQL:角色postgres不存在

我在我的Mac OS Lion上安装了PostgreSQL,正在开发一个rails应用程序.我使用RVM将所有内容与其他Rails应用程序分开.

出于某种原因,当我第一次尝试迁移数据库时,rake无法找到postgres用户.我收到了错误

 FATAL:  role "postgres" does not exist
Run Code Online (Sandbox Code Playgroud)

我有pgAdmin所以我可以清楚地看到数据库中有一个postgres用户 - 实际上是管理员帐户 - 所以我不知道还能做什么.

我在某处读过有关PostgreSQL问题的人,因为它安装了哪条路径,但是如果它找不到db那么我认为我不会那么远.

postgresql rake ruby-on-rails

104
推荐指数
6
解决办法
9万
查看次数

PostgreSQL LIKE查询性能变化

关于LIKE查询数据库中特定表的响应时间,我看到了相当大的变化.有时我会在200-400毫秒内得到结果(非常可接受),但有时候返回结果可能需要30秒.

我知道LIKE查询是非常耗费资源的,但我只是不明白为什么响应时间会有这么大的差异.我已经在该owner1字段上构建了一个btree索引,但我认为这对LIKE查询没有帮助.有人有主意吗?

示例SQL:

SELECT gid, owner1 FORM parcels
WHERE owner1 ILIKE '%someones name%' LIMIT 10
Run Code Online (Sandbox Code Playgroud)

我也尝试过:

SELECT gid, owner1 FROM parcels
WHERE lower(owner1) LIKE lower('%someones name%') LIMIT 10
Run Code Online (Sandbox Code Playgroud)

和:

SELECT gid, owner1 FROM parcels
WHERE lower(owner1) LIKE lower('someones name%') LIMIT 10
Run Code Online (Sandbox Code Playgroud)

有类似的结果.
表行数:约95,000.

postgresql indexing query-optimization pattern-matching sql-like

103
推荐指数
3
解决办法
7万
查看次数

什么是查询计划中的"位图堆扫描"?

我想知道"位图堆扫描"的原理,我知道当我OR在条件中执行查询时经常发生这种情况.

谁能解释"位图堆扫描"背后的原理?

postgresql indexing sql-execution-plan

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

使用pgAdmin导出Postgresql表数据

我正在使用pgAdmin版本1.14.3.PostgreSQL数据库版本是9.1.

我为表创建了所有Db脚本但无法导出表中的所有数据.找不到以db脚本形式导出数据的任何选项.

database postgresql export pgadmin

99
推荐指数
3
解决办法
17万
查看次数

如果不存在,请创建PostgreSQL ROLE(用户)

如何编写一个SQL脚本来在PostgreSQL 9.1中创建一个ROLE,但如果它已经存在则不会引发错误?

当前脚本只有:

CREATE ROLE my_user LOGIN PASSWORD 'my_password';
Run Code Online (Sandbox Code Playgroud)

如果用户已存在,则会失败.我喜欢这样的东西:

IF NOT EXISTS (SELECT * FROM pg_user WHERE username = 'my_user')
BEGIN
    CREATE ROLE my_user LOGIN PASSWORD 'my_password';
END;
Run Code Online (Sandbox Code Playgroud)

...但是这不起作用 - IF在纯SQL中似乎不支持.

我有一个批处理文件,可以创建PostgreSQL 9.1数据库,角色和其他一些东西.它调用psql.exe,传入要运行的SQL脚本的名称.到目前为止,所有这些脚本都是纯SQL,我想尽可能避免使用PL/pgSQL等.

sql postgresql roles dynamic-sql

96
推荐指数
11
解决办法
8万
查看次数

如何删除重复的条目?

我必须为现有表添加唯一约束.这很好,除了表已经有数百万行,并且许多行违反了我需要添加的唯一约束.

删除有问题的行的最快方法是什么?我有一个SQL语句,它找到重复项并删除它们,但它需要永远运行.有没有其他方法可以解决这个问题?也许备份表,然后在添加约束后恢复?

sql postgresql duplicate-removal unique-constraint sql-delete

93
推荐指数
7
解决办法
9万
查看次数

如何在所有表中搜索特定值(PostgreSQL)?

是否可以在PostgreSQL中搜索每个表的每一列中的特定值?

Oracle 提供类似的问题.

postgresql grep string-matching

93
推荐指数
8
解决办法
10万
查看次数

如何在PostgreSQL中的函数内返回SELECT的结果?

我在PostgreSQL中有这个功能,但我不知道如何返回查询结果:

CREATE OR REPLACE FUNCTION wordFrequency(maxTokens INTEGER)
  RETURNS SETOF RECORD AS
$$
BEGIN
    SELECT text, count(*), 100 / maxTokens * count(*)
    FROM (
        SELECT text
    FROM token
    WHERE chartype = 'ALPHABETIC'
    LIMIT maxTokens
    ) as tokens
    GROUP BY text
    ORDER BY count DESC
END
$$
LANGUAGE plpgsql;
Run Code Online (Sandbox Code Playgroud)

但我不知道如何在PostgreSQL函数中返回查询结果.

我发现返回类型应该是SETOF RECORD,对吗?但是返回命令不对.

这样做的正确方法是什么?

sql postgresql return return-type plpgsql

92
推荐指数
2
解决办法
14万
查看次数

模拟CREATE DATABASE如果没有为PostgreSQL提供?

我想创建一个通过JDBC不存在的数据库.与MySQL不同,PostgreSQL不支持create if not exists语法.完成此任务的最佳方法是什么?

应用程序不知道数据库是否存在.它应该检查,如果数据库存在,应该使用它.因此,连接到所需数据库是有意义的,如果由于数据库不存在而导致连接失败,则应创建新数据库(通过连接到默认postgres数据库).我检查了Postgres返回的错误代码,但我找不到任何相同的相关代码.

实现此目的的另一种方法是连接到postgres数据库并检查是否存在所需的数据库并相应地采取措施.第二个是锻炼有点乏味.

有什么方法可以在Postgres中实现这个功能吗?

sql database postgresql ddl jdbc

92
推荐指数
7
解决办法
9万
查看次数

快速发现PostgreSQL中表的行数

我需要知道表中的行数来计算百分比.如果总计数大于某个预定义常量,我将使用常量值.否则,我将使用实际的行数.

我可以用SELECT count(*) FROM table.但是如果我的常量值是500,000并且我的表中有5,000,000,000行,那么计算所有行会浪费很多时间.

一旦超过常数值,是否可以停止计数?

只要它低于给定的限制,我只需要确切的行数.否则,如果计数高于限制,我会使用限制值,并希望尽快得到答案.

像这样的东西:

SELECT text,count(*), percentual_calculus()  
FROM token  
GROUP BY text  
ORDER BY count DESC;
Run Code Online (Sandbox Code Playgroud)

sql postgresql row count

89
推荐指数
3
解决办法
7万
查看次数