Questions tagged «postgresql»

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

2
PostgreSQL使用JSONB加入
我有这个SQL: CREATE TABLE test(id SERIAL PRIMARY KEY, data JSONB); INSERT INTO test(data) VALUES ('{"parent":null,"children":[2,3]}'), ('{"parent":1, "children":[4,5]}'), ('{"parent":1, "children":[]}'), ('{"parent":2, "children":[]}'), ('{"parent":2, "children":[]}'); 这将给: id | data ----+-------------------------------------- 1 | {"parent": null, "children": [2, 3]} 2 | {"parent": 1, "children": [4, 5]} 3 | {"parent": 1, "children": []} 4 | {"parent": …

1
仅使用psql恢复Postgres数据库:pg_restore -vs-
我正在使用pg_dump(以纯文本格式)转储Postgres数据库,然后仅通过使用psql(带有该-f选项)将其还原。 哪个问题出了问题:我是否没有通过使用pg_restore来丢失任何东西,而pg_restore看起来像是一种专门的还原工具(与通用相比psql)? 我可以通过使用pg_dump参数来控制诸如禁用触发器之类的选项。那么,这是pg_restore做什么用的呢?非纯文本转储格式?

1
表填充因子和索引填充因子之间的区别
在Postgres中,可以为索引和表设置fillfactor。有什么区别?如何确定两者的值。有哪些用例? 我正在尝试在空间索引上聚类空间关系。它有几百万条记录。尽管每天都会创建很少的新记录,但是记录会一直更新。 用例是空间范围查询。表填充因子和/或索引填充因子的合适值是什么?
16 postgresql 

2
PL / pgSQL中是否有一种简单的方法来检查查询是否未返回结果?
我目前正在尝试使用PL / pgSQL进行试验,并想知道是否存在一种更优雅的方法来执行以下操作: select c.data into data from doc c where c.doc_id = id and c.group_cur > group_cur order by c.id desc limit 1; EXCEPTION WHEN NO_DATA_FOUND THEN select c.data into data from doc c where c.doc_id = id and c.global_cur > global_cur order by c.id desc limit 1; EXCEPTION …


4
如何使pg_dump跳过扩展名?
这是在9.3上,但我可以记住从7.x开始发生的类似事情。所以我创建数据库并将plpgsql扩展安装到其中。稍后,我创建一个pg_dump,然后将其恢复到数据库之前,请确保它也具有plpgsql扩展名。然后在还原时会发生这种情况: pg_restore: creating EXTENSION plpgsql pg_restore: creating COMMENT EXTENSION plpgsql pg_restore: [archiver (db)] Error while PROCESSING TOC: pg_restore: [archiver (db)] Error from TOC entry 2053; 0 0 COMMENT EXTENSION plpgsql pg_restore: [archiver (db)] could not execute query: ERROR: must be owner of extension plpgsql Command was: COMMENT ON EXTENSION plpgsql …

2
psql:致命错误:对不起,已经有太多客户端
当尝试访问使用postgresql数据库的网站,甚至使用psql实用程序或pgadmin3时,我突然收到此错误。 我的数据库设置为处理150个最大连接: # SHOW max_connections; max_connections ----------------- 150 (1 row) 重新启动我的网站所在的ubuntu服务器(这实际上是使用连接的唯一方法)后,我看到当前的连接数量为140: # select count(*) from pg_stat_activity; count ------- 140 (1 row) 我不明白重新启动服务器后突然有这么多连接。所以我检查了postgresql活动: # SELECT * FROM pg_stat_activity; 而且我看到100列具有相同的确切查询,如下所示: SELECT "reports".* FROM "reports" WHERE (("reports"."time" < '2014-06-28 13:30:42.000000' AND "reports"."unit_id" = 3192)) ORDER BY "reports"."id" DESC LIMIT 1 更重要的是它们都具有相同的客户端地址(我的Web服务器)。 该Web服务器在连接池为50的导轨上使用ruby。即使连接池为50,Passenger进程/ prefork …

2
将远程Postgres表导出为本地计算机上的CSV文件
我对远程服务器上的数据库具有只读访问权限。因此,我可以执行: COPY products TO '/tmp/products.csv' DELIMITER ','; 但是在该服务器上,我没有创建/保存文件的权限,因此我需要在本地计算机上执行此操作。 当我连接到远程数据库时,如何执行命令将文件保存在本地计算机而不是远程服务器上? 或者,如何执行Linux命令以连接到远程数据库,执行查询并将输出作为文件保存到本地计算机?
16 postgresql  export  csv  copy 


4
CHAR与VARCHAR(Postgres)的索引性能
在这个答案(/programming/517579/strings-as-primary-keys-in-sql-database)中,有一条话引起了我的注意: 还请记住,进行索引比较时,CHAR和VARCHAR之间通常会有很大的差异 这是否适用/仍适用于Postgres? 我发现Oracle上的页面声称CHAR或多或少是别名VARCHAR,因此索引性能是相同的,但是在Postgres上没有确定的定义。

3
使用PostgreSQL 8.4,如何将bytea转换为postgres中的文本值?
在我的应用程序中,我使用C代码将数据插入数据库中,因为从不可信来源收到的字符串已经使用PQescapeByteaConnlibpq库转义了。这工作得很好,即以八位字节格式生成字符串。参见以下示例, 输入字符串: \n\t\f\b\p\k\j\l\mestPrepared 输出字符串: \\012\\011\\014\\010pkjlmestPrepared 输出字符串将插入数据库中。现在,我使用JDBC以Java代码从数据库中检索该数据。我如何才能使字符串不转义回其原始值? 我想到了两种可能的方法, 更改数据库检索查询,并将此字段传递给postgres的任何String操作函数,即可以将bytea转换为文本的函数。 用Java代码进行解码。 我知道方法1会更有效。我已经尝试了这里列出的几乎所有功能,但是没有任何效果。请帮忙!! 我正在Linux机器上使用PostgreSQL的8.4版本。

1
在使用pg_restore.exe之前禁用约束
当我尝试pg_restore.exe从数据库执行转储文件时,它会引发数十个错误,所有错误均相同: ERROR: insert or update on table "someTable" violates foreign key constraint "aConstraintName" 这显然是由于我在从转储文件(该文件来自生产数据库)还原数据库之前清空了数据库的事实...当然,如果一个引用表为空,则没有外键约束可以... 在我调用之前pg_restore.exe和之后,有没有一种方法可以针对所有表禁用约束和所有外键,然后重新启用约束和外键。 在SO中,我发现了一些有趣的东西:将约束检查推迟到提交时间。但是我认为在推迟约束之后我不能pg_restore.exe从内部打电话psql.exe。 也有这篇帖子,可以追溯到10年前,建议删除然后重新添加约束。或将pg_class重新触发的值更改为0,这对于约束也可能是可行的...但是,恐怕它比好的实践更容易被黑客入侵... 您有什么建议,这种情况下的最佳做法是什么?是否pg_dump.exe 与该-clean标志一起使用会创建一个转储,从而在还原数据库时绕过约束检查?

1
将元素上载到表中时,“列引用不明确”
我正在使用PostgreSQL作为数据库。我需要在数据库中创建一个条目,如果该条目已经存在,则只需更新其字段即可,但是只有未设置该字段时,才应更新其中一个字段。 我已经从这个问题中使用过信息:https : //stackoverflow.com/questions/13305878/dont-update-column-if-update-value-is-null,它与我所拥有的很相关。 我尝试使用此查询,但是当我运行它时,它出现以下错误Column reference 'affiliate_code' is ambiguous: INSERT INTO accounts (id, token, affiliate_code) VALUES (value1, value2, value3) ON CONFLICT (id) DO UPDATE SET token = value2, affiliate_code = COALESCE(affiliate_code, value3); (当然,实际值将被替换)。 如果我替换affiliate_code = COALESCE(affiliate_code, value3)为affiliate_code = value3,则一切正常,但并非以我希望的方式运行。 我该如何工作? 这是我的表格的定义方式: CREATE TABLE accounts ( id VARCHAR NOT NULL UNIQUE, …


4
PostgreSQL 9.6列删除和带有CTE的SQL函数的副作用
如果我有一个包含3列的表(例如A,B和D),并且我不得不引入一个新表(例如C)来替换D的当前位置。我将使用以下方法: 引入2个新列作为C和D2。 将D的内容复制到D2。 删除D。 将D2重命名为D。 新订单将为A,B,C和D。 我认为这是合法的做法,因为(到目前为止)它没有产生任何问题。 但是,今天,当在同一张表上执行语句的函数返回以下错误时,我遇到了一个问题: table row type and query-specified row type do not match 以及以下详细信息: Query provides a value for a dropped column at ordinal position 13 我尝试重新启动PostgreSQL,执行a VACUUM FULL,最后按照此处和此处的建议删除并重新创建该函数,但是这些解决方案均无效(除了它们尝试解决系统表已更改的情况外)。 由于可以使用非常小的数据库,因此我将其导出,删除并重新导入,从而解决了我的功能问题。 我知道这样一个事实,即不应该通过修改系统表来弄乱列的自然顺序(用弄脏手pg_attribute等),如下所示: 是否可以更改Postgres中列的自然顺序? 从我的函数抛出的错误来看,我现在意识到用我的方法移动列的顺序也是不行的。谁能为我的工作为什么也出错提供一些启发? Postgres版本是9.6.0。 这是函数: CREATE OR REPLACE FUNCTION "public"."__post_users" ("facebookid" text, "useremail" text, "username" …

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.