我想运行这个查询:

SELECT DISTINCT ON (address_id) purchases.address_id, purchases.*
FROM purchases
WHERE purchases.product_id = 1
ORDER BY purchases.purchased_at DESC

但是我得到了这个错误:

SELECT DISTINCT ON表达式必须匹配表达式的初始顺序

添加address_id作为第一个ORDER BY表达式可以消除错误,但我真的不想在address_id上添加排序。有没有可能不按address_id排序?

当数据类型是带时区和没有时区时,时间戳值在PostgreSQL中存储不同吗?这些差异可以用简单的测试用例来说明吗?

我试图运行以下PHP脚本做一个简单的数据库查询:

$db_host = "localhost";
$db_name = "showfinder";
$username = "user";
$password = "password";
$dbconn = pg_connect("host=$db_host dbname=$db_name user=$username password=$password")
    or die('Could not connect: ' . pg_last_error());

$query = 'SELECT * FROM sf_bands LIMIT 10';
$result = pg_query($query) or die('Query failed: ' . pg_last_error());

这会产生以下错误:

查询失败:ERROR:关系“sf_bands”不存在

在我能找到的所有例子中,有人得到一个错误,说明关系不存在,这是因为他们在表名中使用大写字母。我的表名没有大写字母。是否有一种方法来查询我的表不包括数据库名称,即showfinder.sf_bands?

我试图将一个序列设置为一个特定的值。

SELECT setval('payments_id_seq'), 21, true;

这将给出一个错误:

错误:函数setval不存在

使用ALTER SEQUENCE似乎也不工作?

ALTER SEQUENCE payments_id_seq LASTVALUE 22;

如何做到这一点呢?

裁判:https://www.postgresql.org/docs/current/functions-sequence.html

我有一个PostgreSQL数据库表称为“user_links”,目前允许以下重复字段:

year, user_id, sid, cid

唯一的约束目前是第一个字段称为“id”,但我现在希望添加一个约束,以确保年份,user_id, sid和cid都是唯一的,但我不能应用约束,因为重复的值已经存在,违反这一约束。

有没有办法找到所有的副本?

我正在做一个web应用程序,我需要为一些主要的更改做一个分支,事情是,这些更改需要更改数据库模式,所以我想把整个数据库放在git下。

我怎么做呢?是否有一个特定的文件夹,我可以保存在git存储库下?我怎么知道是哪个?我如何确定我放入了正确的文件夹?

我需要确定,因为这些更改是不向后兼容的;我可不能搞砸。

在我的例子中,数据库是PostgreSQL

编辑:

有人建议进行备份并将备份文件置于版本控制之下,而不是将数据库置于版本控制之下。说实话,我觉得这真的很难接受。

肯定有更好的办法。

更新:

好吧,没有更好的方法了,但我还是不太相信,所以我要稍微改变一下问题:

我想将整个数据库置于版本控制之下,我可以使用什么数据库引擎来将实际数据库置于版本控制之下,而不是转储?

sqlite是git友好的吗?

因为这只是开发环境,所以我可以选择任何我想要的数据库。

Edit2:

我真正想要的不是跟踪我的开发历史,而是能够从我的“新的根本性变化”分支切换到“当前稳定的分支”,并且能够用当前稳定的分支修复一些错误/问题等。这样,当我切换分支时,数据库就会自动地与我当前所在的分支兼容。 我不太关心实际数据。

我添加了一个新的,“NOT NULL”列到我的Postgresql数据库使用以下查询(为互联网消毒):

ALTER TABLE mytable ADD COLUMN mycolumn character varying(50) NOT NULL;

每次我运行这个查询,我都会收到以下错误消息:

错误:字段“mycolumn”包含空值

我难住了。我哪里说错了?

注意:我主要使用pgAdmin III(1.8.4),但当我在终端内运行SQL时,我收到了相同的错误。

官方页面没有提到这种情况。但是许多用户只需要psql而不需要本地数据库(我在AWS上有它)。酿造没有psql。

我希望在一条语句中更新PostgreSQL中的多行。有没有一种方法可以像下面这样做?

UPDATE table 
SET 
 column_a = 1 where column_b = '123',
 column_a = 2 where column_b = '345'

我正在建设一个Django网站,我正在寻找一个搜索引擎。

一些候选人:

Lucene/Lucene with Compass/Solr 斯芬克斯 Postgresql内置全文搜索 MySQl内置全文搜索

选择标准:

结果相关性和排名 搜索和索引速度 易于使用,易于与Django集成 资源需求——站点将托管在VPS上,所以理想情况下搜索引擎不需要大量的RAM和CPU 可伸缩性 额外的功能,如“你的意思是?”,相关搜索等

任何使用过上述搜索引擎或其他不在列表中的引擎的人——我很想听听你的意见。

编辑:至于索引需求,由于用户不断地向站点输入数据,这些数据将需要不断地进行索引。它不必是实时的,但理想情况下,新数据在索引中显示的延迟不超过15 - 30分钟