Questions tagged «postgresql»

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

1
PostgreSQL:如何转储和还原集群的角色?
角色存储在群集中的什么位置,如何转储它们? 我做了一个db的pg_dump,然后将它加载到另一个集群中,但是出现了很多这些错误: psql:mydump.sql:3621: ERROR: role "myrole" does not exist 因此,显然我的数据库转储不包含角色。我尝试转储'postgres'数据库,但那里也看不到角色。 我需要使用pg_dumpall --roles-only吗? Postgresql版本8.4.8和9.1.4 OS:Ubuntu 11.04 Natty

4
我需要在没有可用磁盘空间的情况下运行VACUUM FULL
我有一张桌子占用了我们服务器上接近90%的高清空间。我决定删除几列以释放空间。但是我需要将空间返回给操作系统。但是,问题是我不确定如果我运行VACUUM FULL并且没有足够的可用空间来复制表,会发生什么。 我知道不应该使用VACUUM FULL,但是我认为这是这种情况下的最佳选择。 任何想法,将不胜感激。 我正在使用PostgreSQL 9.0.6

3
对数组成员的外键约束?
假设我有一个包含工作角色的表: CREATE TABLE roles ( "role" character varying(80) NOT NULL, CONSTRAINT "role" PRIMARY KEY (role) ); 假设我还有一个表,用户,并且每一行(一个特定的用户)可以具有任意数量的作业角色: CREATE TABLE users ( username character varying(12) NOT NULL, roles character varying(80)[] NOT NULL, CONSTRAINT username PRIMARY KEY (username) ); 我可能应该确保的每个成员都users.roles[]存在于role.role中。在我看来,我想要的是对每个成员的外键约束,users.roles[]例如,如果引用role.role。 对于postgres,这似乎是不可能的。我看错了方向吗?建议的“正确”处理方式是什么?

1
带日期的索引优化
此问题是从Stack Overflow 迁移而来的,因为可以在Database Administrators Stack Exchange上回答。 迁移 7年前。 我在PostgreSQL 9.0.8中有一个很大的对象表(15M +行),我想查询该表中的过时字段。 我想将查询除以数百万,以实现可伸缩性和并发性,并且我想获取几天前带有update_at字段的所有数据。 我已经在100万个ID上尝试了许多索引和查询,但是使用Heroku的Ronin硬件在100秒内似乎无法获得性能。 我正在寻找我没有试图使其尽可能高效的建议。 尝试#1 EXPLAIN ANALYZE SELECT count(*) FROM objects WHERE (date(updated_at)) < (date(now())-7) AND id >= 5000001 AND id < 6000001; INDEX USED: (date(updated_at),id) 268578.934 ms 尝试#2 EXPLAIN ANALYZE SELECT count(*) FROM objects WHERE ((date(now()) - (date(updated_at)) > …

2
使用psql一次获取多个文件
我想以psql单个事务顺序执行几个sql脚本来设置数据库模式。做这个的最好方式是什么?在过去,我知道我遇到了一个psql包含其他文件的主脚本,但是我不记得该脚本的语法。
27 postgresql  psql 

1
PostgreSQL角色与用户,授予权限
我现在正在学习PostgreSQL和MySQL之间的区别,因为我有一个新项目,并且我还打算将现有软件从MySQL迁移到PostgreSQL。我实际上已经开始创建一个HTML表,并在两者之间比较了命令(针对用户/数据库/命令提示符等)。在这里阅读答案后,我注意到role似乎已被用作一个小组。与MySQL我有两个用户,基本公共(DELETE,INSERT,SELECT和UPDATE权限),并与一对夫妇的额外权限的管理员用户。 因此基本上是在Windows 7命令提示符下(仅限本地开发)... 角色是用户,组还是宽松使用的术语,特定于PostgreSQL? 如何为数据库中的所有表仅授予特定用户特定的权限? 如何为数据库中的所有表授予特定用户的所有权限? 在使用权限GRANT或REVOKE获得用户权限时,角色与用户相比如何?
27 postgresql  users 

1
为什么我的PostgreSQL ORDER BY不区分大小写?
我在Debian上运行了Postgres 9.4.4,并且得到以下ORDER BY行为: veure_test=# show LC_COLLATE; lc_collate ------------- en_US.UTF-8 (1 row) veure_test=# SELECT regexp_split_to_table('D d a A c b CD Capacitor', ' ') ORDER BY 1; regexp_split_to_table ----------------------- a A b c Capacitor CD d D (8 rows) 和uname -a: Linux ---- 3.2.0-4-amd64 #1 SMP Debian 3.2.65-1 x86_64 GNU/Linux 但是,在使用Postgres …

2
我应该如何在Postgres中为UUID编制索引?
我是PostgreSQL的新手,而对于数据库则是新手。有没有确定的方法来索引Postgres中的UUID值?我在使用散列和使用Trie之间是分开的,除非已经有一些内置的东西可以自动使用。无论我使用什么,都将处理大量数据。 SP-GiST运算符系列“ text_ops”使用特里索引。因为UUID很长且非常不同,所以即使我只进行完全匹配搜索,这些听起来也很吸引人。 还有一个哈希选项。哈希为O(1),我当然不需要做任何比较,但是,由于UUID很长,因此恐怕从它们生成哈希值会浪费很多时间。 还是这过于依赖系统和使用细节? 在大多数情况下,我宁愿使用bigserial,但有人告诉我为此使用uuid。我们需要uuid,因为我们可能有多个使用不同数据库的服务器,因此不能保证我们将拥有唯一的bigint。我们可以为每个服务器使用不同的序列(和种子),但是它仍然不如UUID灵活。例如,如果不将ID及其引用转换到各处,就无法将数据库条目从一台服务器迁移到另一台服务器。
26 postgresql  index  uuid 

1
索引:如果节点数相同,则整数vs字符串性能
我正在使用PostgreSQL(9.4)数据库在Ruby on Rails中开发应用程序。在我的用例中,表中的列将被非常频繁地查找,因为应用程序的重点是在模型上搜索非常特定的属性。 我目前正在决定是使用一种integer类型还是只使用典型的字符串类型(例如character varying(255),Rails中的默认字符串类型)作为列,因为我不确定索引的性能会有什么不同。 这些列是枚举。对于具有的可能值的数量,它们具有固定的大小。大多数枚举长度不超过5,这意味着该索引在应用程序的整个生命周期中或多或少是固定的;因此,整数和字符串索引的节点数将相同。 但是,将被索引的字符串可能长约20个字符,这在内存中大约是整数的5倍(如果整数是4个字节,并且字符串是每个字符1个字节的纯ASCII,则成立)。我不知道数据库引擎怎么做索引查找窗口,但如果它需要“扫描”的字符,直到它匹配准确,那么在本质上这意味着该字符串查找就超过5倍的整数查找速度较慢; 直到匹配整数查找为止的“扫描”将是4个字节而不是20个字节。这就是我的想象: 查找值为(整数)4: 正在扫描.........................找到| 正在获取记录... | BYTE_1 | BYTE_2 | BYTE_3 | BYTE_4 | BYTE_5 | BYTE_6 | BYTE_7 | BYTE_8 | ... | 查找值是(字符串)“ some_val”(8个字节): 扫描................................................. ....................................发现| 正在获取记录... | BYTE_1 | BYTE_2 | BYTE_3 | BYTE_4 | BYTE_5 | BYTE_6 | BYTE_7 | …


1
PostgreSQL DELETE FROM失败,并显示“错误:尝试删除不可见的元组”
此问题是从“服务器故障” 迁移而来的,因为可以在数据库管理员堆栈交换中回答。 迁移 3年前。 错误 尝试删除包含无效时间戳记的元组 DELETE FROM comments WHERE date > '1 Jan 9999' OR date < '1 Jan 2000' OR date_found > '1 Jan 9999' OR date_found < '1 Jan 2000'; 结束于 ERROR: attempted to delete invisible tuple 有从2009年的邮件列表讨论完全相同的错误信息,其中OP有它固定的,但我没有发现他是如何做到的或可能是什么导致了这种错误的解释。 由于缺乏对Google的欢迎以及对PostgreSQL的了解有限,我感到无助。 导致腐败的原因 当OS内核崩溃时,我有一个在Debian 8上运行的PostgreSQL 9.5.5服务器(〜4TB数据,所有默认设置,除了增加的内存限制)–大概是在重建交换所在的/ dev / md1时。在此之前,PostgreSQL用400GB的日志文件吞噬了几乎所有磁盘空间。操作系统再也不会启动,磁盘检查还可以,所以我已经从LiveCD启动,并将每个块设备备份到了映像,以防万一。我已经成功地从/ dev …

3
如何在Postgresql中列出当前用户拥有的所有架构中的所有表?
我可以使用列出所有架构中的所有表 > \dt *.* 但这还会列出系统表,其数量大大超过我关心的表。我希望我在公共模式和我定义的任何模式中创建的所有表(可能还有视图)。 我希望找到一种方法,而不必在按如下所述创建架构时将架构显式添加到搜索路径中: /programming//a/12902069 编辑: 基于已接受的答案,我创建了以下视图: create view my_tables as select table_catalog, table_schema, table_name, table_type from information_schema.tables where table_schema not in ('pg_catalog', 'information_schema'); 现在,以下命令给了我我想要的: select * from my_tables;

2
一起使用MongoDB和PostgreSQL
我当前的项目实质上是工厂文档管理系统的运行。 就是说,有一些皱纹(惊奇,惊奇)。尽管有些皱纹是该项目特有的,但我相信会出现一些一般性的观察和问题,它们没有规范的答案(无论如何我还是可以找到),并且适用于更广泛的问题领域。这里有很多东西,我不确定它是否适合StackExchange Q&A格式,但我认为这是a)一个可以回答的问题,b)不够具体,足以使社区受益。我的某些注意事项是我特有的,但我认为该问题对于决定使用SQL,NoSQL和两者的任何人都可能有用。 背景: 我们正在构建的Web应用程序包含本质上关系明确的数据以及面向文档的数据。我们也想吃点蛋糕。 TL; DR:我认为下面的#5通过了气味测试。你呢?有没有人有在单个应用程序中进行SQL和NOSQL集成的经验?我试图在下面列出解决此类问题的所有可能方法。我错过了一个有前途的选择吗? 复杂性: 有许多不同类别的文档。这些要求已经需要数十种不同的文档。这个数字只会增加。最好的情况是我们可以利用一种简单的领域特定语言,代码生成和灵活的模式,以便领域专家无需DBA或程序员的干预即可处理新文档类的添加。(注意:已经知道我们遵守格林斯潘的第十条规则) 先前成功写入的完整性是该项目的核心要求。数据将对业务至关重要。如果成功写入的内容保持写入状态,则可以牺牲完整的ACID语义。 这些文件本身很复杂。在我们的特定情况下,原型文档将需要每个文档实例存储150多个不同的数据。病理情况可能会恶化一个数量级,但肯定不会两个。 单类文档是移动的目标,在以后的某个时间点会进行更新。 当我们将其连接到关系数据库时,我们喜欢从Django获得的免费内容。我们希望保留免费赠品,而不必跳回两个Django版本来使用django-nonrel分支。完全转储ORM优于降级到1.3。 本质上,它是关系数据(用户,组等典型的Web应用程序之类的东西,以及我们需要能够实时对复杂查询进行切片和切分的文档元数据)和文档数据(例如我们不希望加入或查询的数百个字段-数据的唯一用例是显示输入该文档的单个文档)。 我想对我的首选方法进行健全性检查(如果您检查自己的发帖历史,我很清楚我不是DBA),并列举了我为其他人解决的所有选项涉及关系和非关系数据的大致相似的问题。 拟议解决方案: 1.每个文档类一张表 每个文档类都有自己的表,其中包含所有元数据和数据的列。 好处: 标准SQL数据模型正在发挥作用。 关系数据以最佳方式处理。如果需要,我们将在以后进行非规范化。 Django的内置管理界面非常适合内省这些表,并且ORM可以愉快地使用100%开箱即用的数据。 缺点: 维护噩梦。数十个(几百个)数千列的表。 应用程序级逻辑负责确定要写入哪个表。使表名成为查询的参数很糟糕。 基本上,所有业务逻辑更改都将要求架构更改。 病理情况可能需要在多个表中剥离单个表单的数据(请参阅:PostgreSQL表中的最大列数是多少?)。 我们可能需要去寻找一个真正的,诚实的上帝DBA,毫无疑问,他最终会讨厌我们和生活。 2. EAV建模 只有一个字段表。实体-属性-值建模已经众所周知。为了完整起见,我将其包括在内。我认为在2013年启动的任何新项目都不会故意采用EAV方法。 好处: 易于建模。 缺点: 更难查询。 DB层不再对构成一个应用程序级对象的内容进行直接表示。 我们将丢失数据库级别的约束检查。 一张桌子上的行数将增长100-1000倍。从性能角度来看,可能是将来的痛点。 索引可能有限。 就ORM而言,DB模式是荒谬的。Web应用程序中包含的电池已保留,但自定义数据模型将需要自定义查询。 3.使用PostgreSQL的hstore或json字段 这些字段类型中的任何一个都可以解决在关系DB上下文中存储无模式数据的问题。我不立即跳到该解决方案的唯一原因是它是一个相对较新的版本(在8.4版中引入,所以不是那个新版本),以前对此没有零接触,并且对此表示怀疑。出于完全相同的原因,我感到不对,因为我会很不舒服地将所有漂亮的,易于规范化的数据扔到Mongo中,即使Mongo可以处理文档之间的引用,我也会感到不舒服。 好处: 我们获得了Django ORM以及内置的身份验证和会话管理的好处。 一切都保留在我们先前成功用于其他项目的一个后端中。 缺点: 没有经验,个人。 它看起来不像是一个非常常用的功能。看起来他们很受推荐给使用NOSQL解决方案的人们的欢迎,但我看不出有很多证据表明它们已被选中。这使我认为我一定想念一些东西。 所有存储的值都是字符串。丢失数据库级别的约束检查。 …

2
LC_CTYPE对PostgreSQL数据库有什么影响?
因此,我几乎没有使用PostgreSQL的Debian服务器。从历史上看,这些服务器和PostgreSQL是使用Latin 9字符集进行本地化的,那时还不错。现在,我们必须处理波兰语,希腊语或中文这样的问题,因此对其进行更改已成为一个日益严重的问题。 当我尝试创建UTF8数据库时,收到消息: 错误:编码UTF8与语言环境fr_FR不匹配详细信息:所选的LC_CTYPE设置需要编码LATIN9。 很少有几次我和我的老朋友Google进行过相关的研究,而我发现的过程过于复杂,例如更新Debian LANG,使用正确的字符集重新编译PostgreSQL,编辑所有LC_系统变量和其他晦涩的解决方案。所以暂时,我们将这个问题搁置一旁。 最近,它又回来了,希腊人想要的东西,而拉丁9人不想。当我再次调查这个问题时,一位同事走近我说:“不,很简单,看。” 他没有编辑任何内容,没有做魔术,他只是执行以下SQL查询: CREATE DATABASE my_utf8_db WITH ENCODING='UTF8' OWNER=admin TEMPLATE=template0 LC_COLLATE='C' LC_CTYPE='C' CONNECTION LIMIT=-1 TABLESPACE=pg_default; 而且效果很好。 我实际上一无所知LC_CTYPE='C',我很惊讶没有在Google的第一个解决方案上甚至在Stack Overflow上都没有使用它。我环顾四周,只在PostgreSQL文档中找到一个提及。 当LC_CTYPE为C或POSIX时,允许使用任何字符集,但是对于LC_CTYPE的其他设置,只有一个字符集可以正常工作。由于initdb冻结了LC_CTYPE设置,因此在集群的不同数据库中使用不同编码的明显灵活性要比实际更具理论性,除非您选择C或POSIX语言环境(从而禁用任何实际语言环境感知)。 因此,让我感到奇怪的是,这太容易了,太完美了,缺点是什么?而且,我很难找到答案。所以我在这里发布: tl; dr:在特定的本地化环境中使用的缺点是什么LC_CTYPE='C'?这样做不好吗?我应该打破什么?

1
如何在PostgreSQL上回收磁盘空间?
此问题是从Stack Overflow 迁移而来的,因为可以在Database Administrators Stack Exchange上回答。 迁移 5年前。 我在本地安装了9.1数据库,只有几个表具有cca。300 mio记录,数据库增长到约20 GB。之后,我发出delete from命令从中删除所有记录(我应该使用过truncate,但我不知道)。因此,我对数据库进行了充分的清理以回收磁盘空间,但这无济于事。我的问题看起来与此相同,但是没有提供解决方案。我已经检查了此线程和有关“恢复磁盘空间”的文档,但仍然找不到解决方案。我使用此代码来获取所有表的大小 SELECT nspname || '.' || relname AS "relation", pg_size_pretty(pg_total_relation_size(C.oid)) AS "total_size" FROM pg_class C LEFT JOIN pg_namespace N ON (N.oid = C.relnamespace) WHERE nspname NOT IN ('pg_catalog', 'information_schema') AND C.relkind <> 'i' AND nspname !~ '^pg_toast' ORDER BY …

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.