使用PGAdmin IIII 可以右键单击数据库,导航到Variables选项卡,然后在数据库本身上放置一个变量名-值属性。有没有办法自定义这些?我看到了一个application_name变量,但我想要一个application_version变量。
我想在位于我的主要物理数据库服务器下的物理服务器上设置一个备份数据库。我正在使用 Postgres 9.2,并且我想使用同步流复制(用于原子性),但我完全不知道诸如A)初始表设置如何从服务器 1 传输到服务器 2(例如,我运行syncdb来自我的 Django 应用程序,它在服务器 1) 上创建了一系列表),以及B)如何将持续的架构更改从服务器 1 传送到服务器 2(例如,我运行 Django South 迁移,它发送ALTER TABLE查询,以及添加/删除索引等)。这些事情是通过流式复制透明地处理的,还是我必须做些什么才能影响两台服务器之间的这种变化?
这是我面临的奇怪问题。我正在尝试使用以下查询输入数据
insert into product_product
(id, product_tmpl_id, make_equip, model_equip, name_template, serial_num_equip, location_equip, issue_date_equip, issue_to_equip, remarks_equip, pr, ch, categ_id,valuation)
values (700,700,'Nikon','Action 10x50 Lookout','Nikon Action 10x50 Lookout','671386','40 Wall St.','5/13/2004 12:00:00 AM','','OM''s OFFICE',62,72,502,'manual periodic');
Run Code Online (Sandbox Code Playgroud)
我收到错误:
ERROR: duplicate key value violates unique constraint "product_product_pkey"
DETAIL: Key (id)=(700) already exists.
********** Error **********
ERROR: duplicate key value violates unique constraint "product_product_pkey"
SQL state: 23505
Detail: Key (id)=(700) already exists.
Run Code Online (Sandbox Code Playgroud)
我在该记录上运行选择查询,如下所示:
select * from product_product
where id=700
Run Code Online (Sandbox Code Playgroud)
它返回没有数据的列(数据也包括 id)
我尝试像这样运行更新查询:
update product_product set
product_tmpl_id=700,
make_equip='Nikon',
model_equip='Action 10x50 …Run Code Online (Sandbox Code Playgroud) 我的数据库应用程序运行许多不同的查询。我已设置log_min_duration_statement为 1000。但记录在那里的查询并不总是很慢,大多数情况下它们只需要几毫秒。
是否可以获得所有查询的统计信息,以及它们花费超过 1000 毫秒的频率?
在 PostgreSQL (9.3) 数据库中,我的 Accounts 和 Customers 之间是一对多的关系,因此在 Customers 表中,我有每个 Customer 的主键的全局唯一 id,以及相应的 Account id。但我还想为每个人分配一个特定于帐户的 ID - 只是一个数字,每个帐户的第一个客户从 1 开始,每个额外的客户递增 - 只是作为帐户中的用户在 UI 中引用客户的一种简单方法.
我可以想到两种可能的解决方案:
使用max()聚合函数获取用于 Account 的最后一个 Customer id 并将其递增
用一个 sequence
sequence某种方式为每个新帐户创建一个单独的帐户(然后在删除帐户时/当删除帐户时将其删除),否则每个帐户将在其客户 ID 序列中得到不连续的值更新
为了澄清最后一点,id 序列中总会出现一些差距;例如,一旦客户被删除,但这些都是意料之中的。除此之外,添加几个新客户的用户通常会希望他们有连续的 id,即使他们相隔几天添加。
OTOH,sequence为所有客户使用一个单一的客户几乎肯定会看到由分配给同时为其他账户创建的客户的 id 引入的常规的、无法解释的差距。
我不是 Postgres 专家,所以我担心我可以多么健壮地实现其中任何一个,尤其是当我一直在努力寻找任何可以遵循的示例时。
有没有普遍接受的方法来做到这一点?
对于拥有超过 300,000 个帐户(并且还在增长)的大型 SAAS 应用程序(由 PostgreSql 9.4 提供支持),使用每个帐户的模式对数据进行分区与将所有数据放在一个模式中并使用外键进行分区的优缺点是什么?在查询中对其进行分区?
我知道过去 pg_dump 在处理许多模式时非常缓慢,但不确定今天是否如此。我也知道必须对所有模式进行数据库结构的任何更改。而且我知道从好的方面来说,将模式从一个物理服务器移动到另一个很容易,以及从备份中恢复模式,更不用说以这种方式对数据进行分区是有意义的。
那么我缺少的优点和缺点是什么?
我有一个包含五个布尔列的表。在 90% 以上的行中,所有列都为空。(False相当于null我。)
我可以有一个包含枚举自定义数据类型数组的单个数组列,而不是具有布尔列,从而仅存储非空的列。
我觉得使用数组很奇怪,但我的同事向我指出,并没有真正强烈的理由反对使用它们,而且我们实际上可能会看到使用它们的节省,因为我们没有存储一堆空列。
使用数组有什么缺点吗?具体来说:它们会占用更多空间,占用更多时间进行查询,还是阻止使用 Postgres 功能(例如 gin 索引)?
我有一个带有如下表的 PostgreSQL 9.5.3 DB:
container
id: uuid (pk)
... other data
thing
id: uuid (pk)
... other data
container_thing
container_id: uuid (fk)
thing_id: uuid (fk)
primary key (container_id, thing_id)
Run Code Online (Sandbox Code Playgroud)
Acontainer可以指向任意数量的things(没有重复),并且 athing可以被任意数量的containers指向。
可能有大量的容器和东西(取决于我们有多少客户)。每个容器中可能只有 1 到 10 个东西。我们一次最多只能查询大约 20 个容器。一个容器可以是空的,我需要取回一个空数组。
我需要构建代表容器的 json 对象,如下所示:
{
"id": "d7e1bc6b-b659-432d-b346-29f3a530bfa9",
... other data
"thingIds": [
"4e3ad81b-f2b5-4220-8e0e-e9d53c80a214",
"f26f49e5-76b4-4363-9ffe-9654ba0b0f0d"
]
}
Run Code Online (Sandbox Code Playgroud)
这工作正常,但我通过使用两个查询来做到这一点:
select * from "container" where "id" in (<list of container ids>)
select * from "container_thing" where "container_id" in …Run Code Online (Sandbox Code Playgroud) 使用 PostgreSQL 9.4,我想要一个只考虑min()距离 onJOIN或 的(所有聚合函数)值的结果WHERE。但似乎这些事情是不允许的。所以,我选择两点之间的距离,我想过滤它只是为了考虑这些min()值。
为了清楚地继续这个问题,假设这些行:
id; gid; distance; time_interval
142; 028; 62; "21:46:00"
200; 028; 53; "08:20:11"
128; 034; 92; "09:24:43"
179; 034; 70; "08:09:34"
194; 034; 92; "05:31:05"
199; 034; 88; "07:15:48"
200; 034; 61; "14:13:43"
202; 035; 24; "17:32:34"
200; 036; 76; "06:02:11"
154; 037; 97; "12:58:58"
154; 040; 30; "11:34:10"
132; 042; 80; "07:01:12"
142; 042; 67; "19:30:21"
Run Code Online (Sandbox Code Playgroud)
我怎样才能提取id, gid,distance和time_interval只考虑min(time_interval) …
我面临以下错误:
Run Code Online (Sandbox Code Playgroud)ERROR: functions in index expression must be marked IMMUTABLE
尝试创建这样的索引时:
CREATE INDEX full_phone_number ON orders_clientphone (concat(area_code, phone));
Run Code Online (Sandbox Code Playgroud)
另一方面,当使用替代语法进行连接时:
CREATE INDEX full_phone_number ON orders_clientphone ((area_code || phone));
Run Code Online (Sandbox Code Playgroud)
Postgres 对此非常满意。
两列都定义为character varying(256)。
postgresql ×10
array ×2
datatypes ×2
performance ×2
schema ×2
aggregate ×1
functions ×1
index ×1
insert ×1
join ×1
json ×1
many-to-many ×1
multi-tenant ×1
primary-key ×1
replication ×1
sequence ×1