小编Cra*_*ger的帖子

优化PostgreSQL的计数查询

我在postgresql中有一个表,其中包含一个不断更新的数组.

在我的应用程序中,我需要获取该数组列中不存在特定参数的行数.我的查询如下所示:

select count(id) 
from table 
where not (ARRAY['parameter value'] <@ table.array_column)
Run Code Online (Sandbox Code Playgroud)

但是当增加行的数量和该查询的执行量(每秒几次,可能是数百或数千)时,性能会下降很多,在我看来,postgresql中的计数可能具有线性执行顺序(I我不完全确定这一点.

基本上我的问题是:

是否有一种我不知道的现有模式适用于这种情况?什么是最好的方法呢?

你能给我的任何建议都会非常感激.

postgresql count database-performance postgresql-performance

7
推荐指数
2
解决办法
3265
查看次数

将图像存储在PostgreSQL数据库的bytea字段中

我使用PHP将图像存储在具有列类型bytea的PostgreSQL数据库中.问题是每次我尝试在浏览器中加载图像时都不会出现.Firefox开发人员控制台表示图像被截断或损坏.

PHP代码:

//code for inserting into the database
if(array_key_exists('submit_pic', $_POST)){
$user=$_SESSION['name'];
if(isset($_FILES['thumbnail'])&&$_FILES['thumbnail']['size']>0){
$fi =  $_FILES['thumbnail']['tmp_name'];
$p=fopen($fi,'r');
$data=fread($p,filesize($fi));
$data=addslashes($data);
$dat= pg_escape_bytea($data); 
$q="update userinfo set image='{$dat}' where email='$user'";
$e=pg_query($q)or die(pg_last_error());

// code for retreving from database
require_once('conn.php');
session_start();
$user=$_SESSION['name'];
pg_query('SET bytea_output = "escape";');
$lquery ="select image from userinfo where email='$user'";
$lq = pg_query($lquery)or die(pg_last_error());
$lqq=pg_fetch_row($lq,'image');
header("conent-type:image");
echo pg_unescape_bytea($lqq[0]);
Run Code Online (Sandbox Code Playgroud)

我需要将上传的图像存储在数据库中 - 我实际上正在使用heroku谢谢

php postgresql heroku bytea

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

从postgres json列中提取数组并映射它

create table test(a json);

insert into test(a) 
values('{"orders":[{"orderId":1}, {"orderId":2, "status":"done"}, {"orderId":3}]}');
Run Code Online (Sandbox Code Playgroud)

鉴于上面的结构,我可以得到一个未完成的数组或一组orderIds吗?那么,我的意思是我可以用sql或plpgsql获取orderIds吗?

任何建议都会很棒!非常感谢你!

postgresql json postgresql-9.3

7
推荐指数
1
解决办法
4241
查看次数

使用"CREATE ... IF NOT EXISTS"时禁止"通知:存在关系"

我有一个函数创建一个临时表来存储和处理数据.问题是我想在单个事务中以1M次的顺序运行此函数,而不需要:

NOTICE:  relation "foo" already exists, skipping
Run Code Online (Sandbox Code Playgroud)

输出~1M次.有没有一种有效的方法呢?

什么是无效的:

  1. 放弃桌子而不是

    DROP TABLE IF EXISTS
    
    Run Code Online (Sandbox Code Playgroud)
    • 导致共享内存耗尽
  2. 捕获duplicate_table异常(效率低于使用IF NOT EXISTS?)

    BEGIN
        CREATE TEMPORARY TABLE foo () ON COMMIT DROP;
    EXCEPTION
        WHEN duplicate_table THEN --do nothing
    END;
    
    Run Code Online (Sandbox Code Playgroud)

postgresql

7
推荐指数
2
解决办法
2859
查看次数

CDI(Weld)将@Stateless EJB注入到Glassfish的@SessionScoped JSF2 bean中"无法将ejbRef转换为ejb"

[ 更新:在Glassfish论坛/ ML讨论http://forums.java.net/jive/thread.jspa?messageID=480532后,对Glassfish提出了一个错误https://glassfish.dev.java.net/issues /show_bug.cgi?id=13040这个问题.]

我正在尝试将@Stateless EJB的本地无接口视图注入到JSF2 @Named @ javax.enterprise.context.SessionScoped支持bean中.EJB是扩展抽象通用基类的几种类型之一.注入"@Inject TheEJBClass varName"失败,"无法将ejbRej的EjbRef转换为类型为my.package.name.TheAbstractBase的业务对象".[编辑:实际上,事实证明注入成功,但注入代理中从超类继承的方法中的方法解析失败.]如果我使用"@EJB TheEJBClass varName",则varName保持为null,即没有注入任何内容.

细节:

我在Linux上运行Glassfish 3.0.1(Ubuntu 10.04,如果它很重要),并且在使用CDI(Weld)将我的数据模型EJB注入我的JSF2会话范围模型时遇到了实际问题.是的,在你问之前,我有beans.xml,CDI正在激活以执行注射.

如果我用@EJB注释注入它,例如:

@EJB TheEJBClass memberName;
Run Code Online (Sandbox Code Playgroud)

...实际上没有注入EJB,只留下memberName为null.

如果我用CDI @Inject注释注入它:

@Inject TheEJBClass memberName;
Run Code Online (Sandbox Code Playgroud)

...当我调用一个在"TheEJBClass"的超类中实现的"memberName"方法并且没有在TheEJBClass中重写时,CDI会抱怨,报告:

java.lang.IllegalStateException: Unable to convert ejbRef for ejb TheEJBClass to a business object of type class my.package.name.TheAbstractBase
    at
com.sun.ejb.containers.EjbContainerServicesImpl.getBusinessObject(EjbContainerServicesImpl.java:104)
at
org.glassfish.weld.ejb.SessionObjectReferenceImpl.getBusinessObject(SessionObjectReferenceImpl.java:60)
....
Run Code Online (Sandbox Code Playgroud)

我已经尝试将基础转换为具体类并对其进行去泛化,但遇到同样的问题,所以我认为我没有使用通用基础攻击Weld错误(https://jira.jboss.org/browse/WELD-305,https://jira.jboss.org/browse/WELD-381,https://jira.jboss.org/browse/WELD-518).

为清晰起见,添加了注释的完整包认证的代码概述如下:

// JSF2 managed backing bean.
//
// Called via #{someJSF2Model.value} in a JSF2 page
//
@javax.inject.Named …
Run Code Online (Sandbox Code Playgroud)

ejb glassfish cdi java-ee-6 jboss-weld

6
推荐指数
1
解决办法
2207
查看次数

多个线程可以在约束集上导致重复更新吗?

在postgres中,如果我运行以下语句

update table set col = 1 where col = 2
Run Code Online (Sandbox Code Playgroud)

在默认READ COMMITTED隔离级别,来自多个并发会话,我保证:

  1. 在单个匹配的情况下,只有1个线程将获得ROWCOUNT为1(意味着只有一个线程写入)
  2. 在多匹配的情况下,只有1个线程将获得ROWCOUNT> 0(意味着只有一个线程写入批处理)

postgresql transactions isolation-level

6
推荐指数
1
解决办法
1919
查看次数

PostgreSQL中是否有类似SSIS的功能?

我们使用SQL 2008 R2中的SSIS(SQL Server Integration Services)将数据库表从30多个数据库(在SQL Server 2000上运行)复制到单个数据库,以便每天进行数据分析.PostgreSQL中是否有类似SSIS的功能?我们正在考虑将来将数据库迁移到开源数据库.谢谢!

postgresql ssis sql-server-2008

6
推荐指数
2
解决办法
4300
查看次数

DELETE FROM ... 报告“.”处或附近的语法错误

我试图从数据库中仅删除一项数据,但是,当我编写命令时,我不断收到一些语法错误,您能告诉我错误在哪里吗?

这是我尝试过的命令:

DELETE FROM database_userprofile WHERE user.username = 'some';
ERROR:  syntax error at or near "."
LINE 1: DELETE FROM database_userprofile WHERE user.username = 'some'...

DELETE FROM database_userprofile USING database_user WHERE user.username="some";
ERROR:  syntax error at or near "."
LINE 1: ... database_userprofile USING database_user WHERE user.username=...
Run Code Online (Sandbox Code Playgroud)

希望你能帮我

database postgresql row delete-row sql-delete

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

从计算的间隔中提取天数

我正在尝试让如下查询起作用:

SELECT EXTRACT(DAY FROM INTERVAL to_date - from_date) FROM histories;
Run Code Online (Sandbox Code Playgroud)

在引用的表中,to_date和from_date是没有时区的时间戳类型。常规查询如

SELECT to_date - from_date FROM histories;
Run Code Online (Sandbox Code Playgroud)

给我间隔结果,例如“65 天 04:58:09.99”。但是在第一个查询中使用此表达式会出现错误:类型间隔的输入语法无效。我尝试过各种引用,甚至嵌套查询,但没有运气。这可以做到吗?

postgresql

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

initdb:初始化pg_authid ... FATAL:索引表达式的数量错误

我是PostgreSql的新手.我正在尝试在我的系统中安装PostgreSql.我的操作系统是Ubuntu,下面发布的是我的错误

将使用区域设置en_US.UTF-8初始化数据库群集.因此,默认数据库编码已设置为UTF8.

creating directory p01/pgsql/data ... ok
creating subdirectories ... ok
selecting default max_connections ... 100
selecting default shared_buffers/max_fsm_pages ... 24MB/153600
creating configuration files ... ok
creating template1 database in p01/pgsql/data/base/1 ... ok
initializing pg_authid ... FATAL:  wrong number of index expressions
STATEMENT:  CREATE TRIGGER pg_sync_pg_database   AFTER INSERT OR UPDATE OR DELETE ON   

pg_database   FOR EACH STATEMENT EXECUTE PROCEDURE flatfile_update_trigger();

child process exited with exit code 1
initdb: removing data directory "p01/pgsql/data"
Run Code Online (Sandbox Code Playgroud)

帮帮我!!谢谢!

postgresql startup

6
推荐指数
3
解决办法
6473
查看次数