Tag: postgresql

在PostgreSQL中使用EXCLUDE防止相邻/重叠条目

我正在创build一个在PostgreSQL 9.2.4中存储任意date/时间范围的数据库。 我想对这个强制date/时间范围不重叠和不相邻(因为两个相邻范围可以表示为单个连续范围)的数据库施加约束。 为此,我正在使用带有GiST索引的EXCLUDE约束。 这是我目前的限制: ADD CONSTRAINT overlap_exclude EXCLUDE USING GIST ( box( point ( extract(EPOCH FROM "from") – 1, extract(EPOCH FROM "from") – 1 ), point ( extract(EPOCH FROM "to"), extract(EPOCH FROM "to") ) ) WITH && ); from和to的列都是TIMESTAMP WITHOUT TIME ZONE ,并且是以UTC格式存储的date/时间(在将数据插入到应用程序中的这些列之前,我将其转换为UTC,并且在postgresql.conf中将数据库的时区设置为“UTC” )。 但是我想我可能会遇到的问题是,这个约束使得(不正确的)假设没有时间增量小于一秒。 值得注意的是,对于我所存储的特定数据,我只需要第二个解决scheme。 不过,我觉得我可能仍然需要处理这个问题,因为SQLtypes的timestamp和timestamptz的分辨率都高于一秒。 我的问题是:是否有任何问题,简单地假设第二个决议,因为这是我的应用程序的所有需求(或希望),或者,如果有,我怎么能改变这个约束来处理一秒健壮的方式?

约束定义了DEFERRABLE INITIALLY IMMEDIATE仍然是DEFERRED?

关于这个答案,我偶然发现了一个我无法解释的现象。 版: 在x86_64-unknown-linux-gnu上的PostgreSQL 9.1.2,由gcc-4.4.real编译(Debian 4.4.5-8)4.4.5,64位 考虑下面的演示。 testing平台: CREATE TEMP TABLE t ( id integer ,txt text ,CONSTRAINT t_pkey PRIMARY KEY (id) DEFERRABLE INITIALLY IMMEDIATE ); INSERT INTO t VALUES (1, 'one') ,(2, 'two'); 1)修改多行的UPDATE语句: UPDATE t SET id = t_old.id FROM t t_old WHERE (t.id, t_old.id) IN ((1,2), (2,1)); 在目前的实施中似乎有一个错误? 上面的更新工作,虽然它不应该 。 约束被定义为INITIALLY IMMEDIATE ,我没有使用SET […]

我怎样才能从PostgreSQL触发器发送电子邮件?

我使用pgsql来设置一个触发器,当更新表数据集(将状态更改为Finished)时,它将使用数据集的电子邮件值自动发送电子邮件到电子邮件帐户,并将此电子邮件保存在服务器 但是我不知道如何在触发函数中写入发送邮件,并在服务器端发送邮件。 先谢谢你 Pg版本是9.1和CentOS 5.8 CREATE OR REPLACE FUNCTION sss() RETURNS trigger AS $BODY$begin if(NEW.publisher== 'aaaa') then //send email and save to server 192.168.171.64 end if; return NEW; end $BODY$ LANGUAGE plpgsql VOLATILE COST 100; ALTER FUNCTION sss() OWNER TO postgres; GRANT EXECUTE ON FUNCTION sss() TO postgres;

PostgreSQL:错误:42601:函数返回“record”时需要列定义列表

(免责声明:PostgreSQL新手。) 好的,据我所知,我的function与我所见过的样品非常相似。 有人能告诉我如何让这个工作? create or replace function get_user_by_username( username varchar(250), online boolean ) returns setof record as $$ declare result record; begin if online then update users set last_activity = current_timestamp where user_name = username; end if; return query select user_id, user_name, last_activity, created, email, approved, last_lockout, last_login, last_password_changed, password_question, comment from users where user_name […]

entity frameworkPostgreSQL

有人可以告诉我如何获得与PostgreSQL工作的MSentity framework。 另外:实体Framewok如何与Mono一起工作? 你能不能build议其他类似的在单声道上运行的ORM工具?你对他们有什么看法?

Postgresql截断速度

我们使用Postgresql 9.1.4作为我们的数据库服务器。 我一直在试图加速我的testing套件,所以我已经盯着分析分贝来看看到底发生了什么。 我们使用database_cleaner在testing结束时截断表。 是的,我知道交易更快,我不能在某些情况下使用它们,所以我不关心这一点。 我所关心的是,为什么TRUNCATION需要这么长时间(比使用DELETE时间长),为什么在我的CI服务器上需要更长的时间。 目前,在本地(在Macbook Air上)一个完整的testing套件需要28分钟。 拖尾日志,每次我们截断表…即: TRUNCATE TABLE table1, table2 — … etc 执行截断需要1秒多的时间。 拖拽我们的CI服务器(Ubuntu 10.04 LTS)上的日志,需要8秒钟的时间来截断表,而构build需要84分钟。 当我切换到:deletion策略时,我的本地构build花了20分钟,CI服务器下降到44分钟。 这是一个重大的差异,我真的被吹走,为什么这可能是。 我调整 了 CI服务器上的数据库,它有16GB的系统RAM,4GB的shared_buffers …和一个SSD。 所有的好东西。 这怎么可能: 一个。 这比我的MacBook Air和2gb的RAM要慢很多 湾 那个TRUNCATION比DELETE慢得多,当postgresql文档 明确指出它应该快得多。 有什么想法吗?

可以使用postgres执行跨数据库查询?

我会猜测答案是不是基于下面的错误消息(和这个谷歌的结果 ),但有无论如何执行使用Postgres的跨数据库查询? databaseA=# select * from databaseB.public.someTableName; ERROR: cross-database references are not implemented: "databaseB.public.someTableName" 我正在处理跨两个数据库分区的一些数据,尽pipe数据实际上是在两者之间共享的(一个数据库中的userid列来自另一个数据库中的users表)。 我不知道为什么这些是两个单独的数据库,而不是模式,但c'est la vie …

如何通过Node.js连接到Postgres

我发现自己试图创build一个postgres数据库,所以我安装了postgres,并用initdb /usr/local/pgsql/data启动了一个服务器,然后我用postgres -D /usr/local/pgsql/data开始了这个实例。通过节点与此交互? 例如, connectionstring是什么,或者我怎么能够找出它是什么。

Postgres无法连接到服务器

我做了更新和酿造升级后,我的postgres有一些问题。 我试图卸载postgres并再次安装,但它不工作。 这是错误信息(当我尝试执行rake db:migrate时,也收到了这个错误信息) $ psql psql: could not connect to server: No such file or directory Is the server running locally and accepting connections on Unix domain socket "/tmp/.s.PGSQL.5432"? 我该如何解决? Mac版本:山狮子。 自制软件版本:0.9.3 postgres版本:psql(PostgreSQL)9.2.1 这就是我所做的。 12:30 ~/D/works$ brew uninstall postgresql Uninstalling /usr/local/Cellar/postgresql/9.2.1… 12:31 ~/D/works$ brew uninstall postgresql Uninstalling /usr/local/Cellar/postgresql/9.1.4… 12:31 ~/D/works$ psql –version bash: /usr/local/bin/psql: […]

使用数组参数多次调用set-returning函数

这是plpgsql函数的一个变体, 它返回多个被多次调用的列 。 但是,我希望find一个解决我的特定情况。 我有一个函数,用给定的参数处理行数组,并返回一组行+一个新的列。 CREATE OR REPLACE foo(data data[], parameter int) RETURNS SETOF enhanceddata AS … 该function仅对一组数据有效 SELECT * FROM foo( (SELECT ARRAY_AGG(data) FROM datatable GROUP BY dataid WHERE dataid = something), 1) 但我想使它与多组数据一起工作,而不将数据传递给函数。 我尝试了一些变化: SELECT dataid, (foo(ARRAY_AGG(data)),1).* FROM dataset WHERE dataid = something — only testing on 1 GROUP BY dataid 但是这个函数被每一列调用一次。