我需要一个免费的数据库软件并想到 PostgreSQL。但是后来我读到它的表大小限制为 32 TB,但我需要更多(并且不想在 Oracle 等高端数据库软件上花费数千/数百万美元)。
有没有办法手动增加该限制?如果是这样,这样做的惩罚是什么?
使用 Postgres 9.1.4 和 PostGIS 1.5,作为 Rails 3.2.x 应用程序的一部分。
我有一个包含模式 A 和 B 的数据库,模式 A 为空,模式 B 包含表 foo 和 bar,在非 PK 字段中的每个表上都有索引,例如email.
如果我用 设置我的模式搜索路径SET search_path TO A,B;,那么我可以运行:
CREATE TABLE foo (...);
Run Code Online (Sandbox Code Playgroud)
并在模式 A 中创建表 foo。但以下迁移失败:
CREATE TABLE bar (...);
CREATE UNIQUE INDEX index_bar_on_email ON bar USING btree (email);
Run Code Online (Sandbox Code Playgroud)
和
Index name 'index_bar_on_email' on table 'bar' already exists
Run Code Online (Sandbox Code Playgroud)
这表明create table和create unique index处理搜索路径的方式不同。有没有办法哄 PG 在模式 A 中创建索引?
更新
这个问题似乎与 Rails 如何与 Postgres 接口有关。创建 …
我正在运行 PostgreSQL 9.1.4。
我有一个包含许多现有行的表,以及一堆其他带有指向它的外键的表,我正在尝试:
1 - 删除当前主键上的 pkey 约束,因为它当前不是串行类型。
2 - 添加一个串行类型的列并将该新列作为主键。
3 - 将步骤 #1 的旧列设置为 UNIQUE 并为所有具有指向我的表的外键的表重新创建外键。事实上,这些表都有两个指向我的表的外键:一个指向当前作为主键的旧列,另一个指向新的串行类型列
我已经成功创建了一个执行此操作的脚本,但我想知道:
a) 在上面的第 1 步删除 pkey 约束是否也会删除与该主键关联的索引?
b)如果没有,有没有办法重用该索引?在第 3 步添加回 UNIQUE 约束后,会创建一个新索引还是使用之前存在的索引?除了创建的新列(串行主键)外,表中没有任何内容被更改。
编辑(一些澄清):
postgresql index database-design primary-key unique-constraint
根据隔离级别,可能会展示 SELECTS 不同行为的场景:
1) 0:00 Thread A runs a query that returns 1000 rows that takes 5 minutes to complete
2) 0:02 Thread B runs a query that returns the same 1000 rows
3) 0:05 Thread A updates the last 1 rows in this result set and commits them
4) 0:07 Thread B's query returns*
Run Code Online (Sandbox Code Playgroud)
根据隔离级别,#4 中的结果集要么包含线程 A 的更改,要么不包含。UPDATES 也是如此吗?
下面是一个示例场景:
Thread A: UPDATE... set version=6 ... WHERE primary_key = 1234 AND version = 5
Thread B: UPDATE... set …Run Code Online (Sandbox Code Playgroud) 我的 PostgreSQL 8.4 数据库发生了一场小灾难。
我在两个表中跟踪访问者访问我的网页:
+---------------+-------------+
| whereseenlast | varchar(50) |
| uniqid | varchar(13) |
| whenseenlast | timestamp |
| bla1 | varchar(10) |
| bla2 | varchar(10) |
| bla3 | varchar(10) |
+---------------+-------------+
Run Code Online (Sandbox Code Playgroud)
样本数据:
+-----------------+---+---------------------+----------+----------+----------+
| where1.html | 1 | 2000-01-01 00:00:00 | somebla1 | somebla2 | somebla3 |
| where2.html | 1 | 2005-05-05 05:06:07 | somebla1 | somebla2 | somebla3 |
| where12345.html | 1 | 2012-11-22 11:22:33 | somebla1 | somebla2 | …Run Code Online (Sandbox Code Playgroud) 我们有一个关于 Server Fault 的问题,提出了一个有趣的问题:
鉴于 Postgres 9.2 可扩展性改进中的可扩展性改进,使用连接池机制来避免与数据库建立额外连接的开销更好,还是连接提高读取性能的开销值得吗?
将它具体与我的环境相关联:我们有一个以数据库为支持且以读取为中心的 Web 应用程序,我们目前在 Postgres 8.4 上运行。
我们的重新实现将于明年启动,同时升级到 9.2,并为每个 Apache 工作进程提供自己与数据库的连接(因此,它自己的 Postgres 后端会在 Apache 工作人员的生命周期内保留)。
根据我们所看到的,这似乎是连接到数据库的开销和让更多工作人员处理读取负载之间的良好平衡,尽管我们还没有进行任何实质性的基准测试来确认这一点。
该实现看起来是否合理?鉴于最近的可扩展性改进,我们是否应该考虑其他选项/连接池机制?
我编写了这个函数,它应该遍历文本数组并将每个元素(这是一个类型转换的整数)转换为十六进制,附加到文本变量,然后返回十六进制。然而,我什么也得不到。
有没有人看到该函数有任何问题会导致它不返回任何内容?
CREATE OR REPLACE FUNCTION array_convert_to_hex(text[])
RETURNS text
AS
$$
DECLARE
arrInts ALIAS FOR $1;
retVal text;
BEGIN
FOR I IN array_lower(arrInts, 1)..array_upper(arrInts, 1) LOOP
retVal := retVal || lpad(cast(to_hex(arrInts[I]::integer) as varchar), 2, '0');
END LOOP;
RETURN retVal;
END;
$$
LANGUAGE plpgsql
STABLE
RETURNS NULL ON NULL INPUT;
Run Code Online (Sandbox Code Playgroud) 我正在尝试运行以下 sql 命令:
SELECT ARRAY(
SELECT column_name
FROM information_schema.columns
WHERE table_name ='gis_field_configuration_stage'
);
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
ERROR: could not find array type for datatype information_schema.sql_identifier
Run Code Online (Sandbox Code Playgroud) 我想知道关于stackoverflow的问题的答案中提供的解决方案的相对性能,我决定运行一些测试。
在给定一组优先级递减的条件的情况下,OP 希望获得第一个匹配行。两种解决方案都涉及一个伪列,但一个(我的)涉及将多个SELECT语句UNION ALL组合在一起,而另一个则构造了一个CASE表达式。
我分享我的结果,希望有人会发现这很有用。
postgresql performance index execution-plan query-performance
我有一个包含这些行的表:
Stickers
------------------------------------------------------
ID | Title |Keywords (ts_vector)
------------------------------------------------------
01 | Sticker Case 580H |'580h':3 'cas':2 'stick':1
02 | Sticker Case 580L |'580l':3 'cas':2 'stick':1
03 | Sticker Case 580 |'580':3 'cas':2 'stick':1
04 | Sticker Case Plus 3000|'3000':4 'cas':2 'plus':3 'stick':1
Run Code Online (Sandbox Code Playgroud)
好吧,当我使用这个脚本进行搜索时,只返回第 03 行,我如何返回第 01 和 02 行?
SELECT
*
FROM
stickers
WHERE
keywords @@@ to_tsquery('case & 580');
Run Code Online (Sandbox Code Playgroud) postgresql ×10
index ×3
array ×1
catalogs ×1
functions ×1
locking ×1
mysql ×1
oracle ×1
performance ×1
primary-key ×1
recovery ×1
scalability ×1