我在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
我使用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谢谢
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吗?
任何建议都会很棒!非常感谢你!
我有一个函数创建一个临时表来存储和处理数据.问题是我想在单个事务中以1M次的顺序运行此函数,而不需要:
NOTICE: relation "foo" already exists, skipping
Run Code Online (Sandbox Code Playgroud)
输出~1M次.有没有一种有效的方法呢?
什么是无效的:
放弃桌子而不是
DROP TABLE IF EXISTS
Run Code Online (Sandbox Code Playgroud)
捕获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)[ 更新:在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) 在postgres中,如果我运行以下语句
update table set col = 1 where col = 2
Run Code Online (Sandbox Code Playgroud)
在默认READ COMMITTED隔离级别,来自多个并发会话,我保证:
我们使用SQL 2008 R2中的SSIS(SQL Server Integration Services)将数据库表从30多个数据库(在SQL Server 2000上运行)复制到单个数据库,以便每天进行数据分析.PostgreSQL中是否有类似SSIS的功能?我们正在考虑将来将数据库迁移到开源数据库.谢谢!
我试图从数据库中仅删除一项数据,但是,当我编写命令时,我不断收到一些语法错误,您能告诉我错误在哪里吗?
这是我尝试过的命令:
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)
希望你能帮我
我正在尝试让如下查询起作用:
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的新手.我正在尝试在我的系统中安装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 ×9
bytea ×1
cdi ×1
count ×1
database ×1
delete-row ×1
ejb ×1
glassfish ×1
heroku ×1
java-ee-6 ×1
jboss-weld ×1
json ×1
php ×1
row ×1
sql-delete ×1
ssis ×1
startup ×1
transactions ×1