Questions tagged «postgresql»

PostgreSQL的所有版本。如果该上下文很重要,请添加其他特定于版本的标记,例如postgresql-11。

2
转换度量单位
寻找一种最合适的计量单位清单,列出以不同(但兼容)单位体积给出的物质。 单位换算表 单位转换表存储各种单位以及这些单位之间的关系: id unit coefficient parent_id 36 "microlitre" 0.0000000010000000000000000 37 37 "millilitre" 0.0000010000000000000000000 5 5 "centilitre" 0.0000100000000000000000000 18 18 "decilitre" 0.0001000000000000000000000 34 34 "litre" 0.0010000000000000000000000 19 19 "dekalitre" 0.0100000000000000000000000 29 29 "hectolitre" 0.1000000000000000000000000 33 33 "kilolitre" 1.0000000000000000000000000 35 35 "megalitre" 1000.0000000000000000000000 0 按系数排序显示parent_id链接将子单元与其数字上级链接。 可以使用以下方法在PostgreSQL中创建该表: CREATE TABLE unit_conversion ( id …

1
存储记录元数据的最佳实践
在数据库中存储单个记录的元数据的最佳实践是什么? 我需要在数据库中存储常见的元数据,例如创建时间和最后更新时间。我找到了几种不同的解决方案: 将元数据直接存储在表中。 优点: 元数据直接链接到记录 无需联接即可检索元数据 缺点: 需要大量重复的列(除非使用继承) 元数据和业务数据不分开 使用创建通用元数据表,并使用软外键将数据链接到正确的表和记录。 优点: 没有重复的列 元数据与业务数据分开 缺点: 元数据和数据之间没有直接链接(不能使用FK) 加入需要附加条件 为每个需要元数据的表创建单独的元数据表。 优点: 元数据直接链接到记录 元数据与业务数据分开 缺点: 需要很多额外的表 需要大量重复的列(除非使用继承) 是否有比我在这里提到的更多的优缺点?存储此元数据的最佳实践是什么?

3
可重复读中的不一致
http://www.postgresql.org/docs/9.2/static/transaction-iso.html 可重复读取模式提供了严格的保证,即每个事务都能看到数据库的完全稳定的视图。但是,此视图不一定总是与同一级别的并发事务的某些串行(一次一个)执行一致。例如,即使是该级别的只读事务,也可能会看到更新了控制记录以显示批次已完成,但是看不到逻辑上属于该批次的详细记录之一,因为它读取了控制记录的较早版本。 。如果不谨慎使用显式锁来阻止冲突的事务,则试图通过在此隔离级别运行的事务来强制执行业务规则的尝试将无法正常工作。 这不是幻像读取吗,在可重复读取模式下是不可能的? 该文档说,在可重复读取事务中的查询在事务开始时看到快照,那么查询怎么可能读取不一致的数据?


5
更改密码后PostgreSQL用户无法连接到服务器
我用创建的4个角色满足了这一要求: 使用GUI(1)在pgAdmin III中更改了用户的密码后,该用户无法再登录。 pgAdmin III显示错误消息: An error has occurred: Error connecting to the server: FATAL: password authentication failed for user "sam" FATAL: password authentication failed for user "sam" 我的系统:Ubuntu 12.04上的Postgresql 9.2 有没有什么办法解决这一问题? (1):使用帐户postgres登录,右键单击“登录角色”中的用户,转到“定义”选项卡,然后输入密码

3
将公式存储在表中并在函数中使用该公式
我有一个PostgreSQL 9.1数据库,其中部分处理代理佣金。每个代理商都有自己的计算公式,他们可以得到多少佣金。我有一个函数来生成每个代理应获得的佣金数量,但是随着代理数量的增加,它变得无法使用。被迫做一些非常长的case语句和重复代码,这使我的功能变得非常庞大。 所有公式都有常量变量: d ..该月工作的天数 r ..新节点累积 l ..忠诚度得分 s ..子代理人佣金 b ..基本利率 我..获得的收入 公式可以是: d*b+(l*4+r)+(i/d)+s 每个代理商与人力资源部门协商付款方式。因此,我可以将公式存储在代理表中,然后像一个小的函数一样,仅从表中获取公式并将其转换为值并计算金额吗?

1
对值为NULL的布尔值进行查询时发生意外的Seq扫描
我有一个称为auto_review列类型为的数据库列boolean。使用ActiveRecord ORM创建该字段的索引。 CREATE INDEX index_table_on_auto_renew ON table USING btree (auto_renew); 当我在字段中查询布尔值时,PG会按预期使用索引。 EXPLAIN for: SELECT "table".* FROM "table" WHERE "table"."auto_renew" = 'f' QUERY PLAN ---------------------------------------------------------------------------------------------- Bitmap Heap Scan on table (cost=51.65..826.50 rows=28039 width=186) Filter: (NOT auto_renew) -> Bitmap Index Scan on index_domains_on_auto_renew (cost=0.00..44.64 rows=2185 width=0) Index Cond: (auto_renew = false) (4 …

3
高效比较不同货币的价格
我想让用户可以在一个价格范围内搜索产品。无论产品设置哪种货币,用户都应该能够使用任何货币(美元,欧元,英镑,日元,...)。因此,产品价格为200美元,并且,如果用户搜索价格在100欧元至200欧元之间的产品,他仍然可以找到它。如何使其快速有效? 这是我到目前为止所做的。我保存price,currency code而calculated_price这是在欧元(EUR)的价格是默认货币。 CREATE TABLE "products" ( "id" serial, "price" numeric NOT NULL, "currency" char(3), "calculated_price" numeric NOT NULL, CONSTRAINT "products_id_pkey" PRIMARY KEY ("id") ); CREATE TABLE "currencies" ( "id" char(3) NOT NULL, "modified" timestamp NOT NULL, "is_default" boolean NOT NULL DEFAULT 'f', "value" numeric NOT NULL, -- ratio additional …
10 postgresql  money 

4
如何有条件地停止psql脚本(基于变量值)?
让我们考虑以下示例(从psql脚本开始): \c :db_to_run_on TRUNCATE the_most_important_table; -- tried to avoid similarities to anything that exists out there 现在,如果通过命令运行它 psql [connection details] -v db_to_run_on=\'dev_database\' 然后它就运行了,用户很高兴。但是,如果他决定指定-v db_to_run_on=production_database呢?(让我们假设这会发生,就像人们rm -rf / # don't try this at home!!!偶尔运行一样。)希望该表有一个新的备份... 因此出现了一个问题:如何检查传递给脚本的变量并根据其值停止进一步处理?
10 postgresql  psql 

4
如何检查子查询是否恰好具有一个完全不同的结果和一个指定的值?
我发现自己写了以下内容: select 'yes' where exists(select * from foo where val=1) and not exists(select * from foo where val<>1); 并且想知道是否有一种更简洁的方法而不牺牲太多的可读性。 我找到了一种发布答案的方法,但我对此并不完全满意,并且会对替代方法非常感兴趣 在这种情况下val,内部是唯一的foo-没有重复项

1
PostgreSQL数据类型文本与无长度的varchar
在PostgreSQL中,您可以创建数据类型字符变化(无长度精度)的列或类似以下文本的列: ALTER TABLE test ADD COLUMN c1 varchar; ALTER TABLE test ADD COLUMN c2 text; 这两种数据类型之间有区别吗? 该文档尚不清楚。他们说 : 如果使用字符变化而没有长度说明符,则该类型接受任何大小的字符串。 [...] 另外,PostgreSQL提供了文本类型,可以存储任意长度的字符串。 似乎这两个数据类型是等效的,但不是显式的...有关此的更多信息? 谢谢你尼科

2
我可以让一个表成为另一个的“别名”或“符号链接”吗?
我有两个具有相同结构的表A和B。编写了某个应用程序,因此它始终将相同的数据写入两个表。 与一位同事讨论了节省驱动器空间的潜力之后,我想知道mysql或postgresql是否可以在表上创建另一个的“别名”或“符号链接”。 我希望该行为与软文件符号链接的行为非常相似;从symlink本身或其目标读取将产生相同的输出,而对其中一个写入将更新目标。
10 mysql  postgresql 

2
带有多列的Postgres全文搜索,为什么在索引中而不是在运行时连接?
在过去的几天里,我在postgres中遇到了全文搜索,并且在跨多列搜索时对索引有些困惑。 postgres 文档讨论了如何ts_vector在串联列上创建索引,如下所示: CREATE INDEX pgweb_idx ON pgweb USING gin(to_tsvector('english', title || ' ' || body)); 我可以这样搜索: ... WHERE (to_tsvector('english', title||' '||body) @@ to_tsquery('english', 'foo')) 但是,如果我想有时仅搜索标题,有时仅搜索正文,有时两者都搜索,则需要3个单独的索引。如果我在第三列中添加了索引,则可能是6个索引,依此类推。 我在文档中没有看到的另一种方法是只是分别索引两列,然后使用普通WHERE...OR查询: ... WHERE (to_tsvector('english', title) @@ to_tsquery('english','foo')) OR (to_tsvector('english', body) @@ to_tsquery('english','foo')) 在大约一百万行中对这两个基准进行基准测试似乎在性能上基本没有区别。 所以我的问题是: 为什么我要连接这样的索引,而不是单独索引列?两者的优点/缺点是什么? 我最好的猜测是,如果我事先知道,我只想搜索两个列(一次不搜索),那么我只需要通过串联使用较少内存的一个索引。

2
PostgreSQL可以创建区分大小写的数据库吗?
我正在将一些代码从某些版本的Sybase移植到PostgreSQL。这是一个使用Sybase客户端库的C应用程序。我的方法是编写一个转换层,以将调用转换dbsqlexec()为PQexec()(例如)。该部分大部分正常工作。 看来Sybase数据库是以区分大小写的方式(相对于数据库对象名称)设置的。例如,同时有一个WIDGET表和一个widget表。看起来此应用程序中的约定是:全大写名称表示实际数据表,而小写名称在运行某些处理时用作临时表。 根据4.1词法结构,“ 关键字和未加引号的标识符不区分大小写。 ”我知道我可以对标识符加双引号以禁用自动折叠为小写字母,但是我不想通过成千上万的行手动进行操作使用此数据库的代码。 有没有一种方法可以设置PostgreSQL以禁用数据库对象标识符的这种自动大小写折叠? 我的替代方法是编写一些代码,检查每个SQL语句,并在每个标识符(不是关键字)周围加上双引号。

2
PostgreSQL:对表的最后访问时间
我负责一个大型的PostgreSQL数据库,只有几十个表。我怀疑其中许多表从未访问过。 检查上次访问某个表的时间的最佳方法是什么?我想加入一个触发的DELETE,INSERT和UPDATE,但我希望有一个更有效的方法。
10 postgresql 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.