Questions tagged «postgresql»

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

2
在PostgreSQL上进行流式复制和故障转移
我正在对PostgreSQL复制进行概念验证。在论坛上进行讨论后,我们决定选择流复制,因为与其他解决方案相比,它的性能很好。PostgreSQL没有为流复制提供自动故障转移。我们可以使用触发文件将从站切换为主站,但这是不可管理的。因此,我想要一个具有自动故障转移和高可用性的解决方案。 提供不同的解决方案: Repmgr Linux心跳 Pgpool-II(仅用于自动故障转移) 如果使用其他任何工具。 我的问题是应该使用哪种解决方案?

3
如何将mysql转换为postgresql?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为数据库管理员Stack Exchange 的主题。 5年前关闭。 我拼命寻找一个转换工具,将一个大的mysql数据库转换为postgresql。我需要的工具/脚本是: 自由 在Linux下工作 易于使用,不会出错 您实际上已尝试并确认有效 最好不要用Java或Ruby编写 我尝试了此处列出的其他工具,但没有一个适合我。 先感谢您。

4
我应该花时间将列类型从CHAR(36)更改为UUID吗?
我的数据库中已经有几百万行。设计架构时,我不了解PostgreSQL UUID数据类型。 其中一张表具有1600万行(每个分片约350万至400万条记录),每天增长约50万条记录。如果需要,我仍然可以将生产系统停机几个小时。我将在一两个星期内没有这种奢侈。 我的问题是,这样做值得吗?我想知道JOIN的性能,磁盘空间的使用(完全gzip的转储为1.25 GiB),这种性质的事情。 表架构为: # \d twitter_interactions Table "public.twitter_interactions" Column | Type | Modifiers -------------------------+-----------------------------+----------- interaction_id | character(36) | not null status_text | character varying(1024) | not null screen_name | character varying(40) | not null twitter_user_id | bigint | replying_to_screen_name | character varying(40) | source | character varying(240) …
14 postgresql 

1
如何将大型Blob表从mysql迁移到Postgresql?
我现在正在将MySQL数据库迁移到PostgreSQL。除了我拥有的一张桌子外,几乎所有其他东西都很好(嗯,经过大量的谷歌搜索以查找正确的mysqldump参数等),实际上是我的应用程序中最重要的一张桌子。 表的结构很简单: mysql> show create table samples; .. skipped ... CREATE TABLE `samples` ( `File_ID` int(11) NOT NULL, `File` longblob, PRIMARY KEY (`File_ID`) ) ENGINE=InnoDB DEFAULT CHARSET=binary 但它非常大(> 20 Gb)。 我尝试使用mysqldump的--hex-blob参数-但是当我尝试将生成的转储文件用作命令文件时,PostgreSQL不接受这种格式的数据。我尝试过的另一个选项是使用--tab选项只是获取转储,然后使用COPY命令将其插入到PostgreSQL中-但是--hex-blob无法与--tab一起使用,并且PostgreSQL仍然不接受在那说的转储文件是无效字符。 我很高兴收到关于此事的任何建议-尽管我开始认为编写自定义迁移工具毕竟不是一个坏主意...

1
IDLE状态在pg_stat_activity行中表示什么?
有人可以解决我关于pg_stat_activitypostgres 9.5的以下疑问吗? 可以让我知道state IDLE行中的表示什么pg_stat_activity吗?是否就像它检查到postgres的所有打开的连接,并且如果该连接未执行任何查询,则IDLE表示该连接执行的最后一个查询? 在输出中,select * from pg_stat_activity我看到与state IDLE的行和query_start_date超过2天的行?这意味着什么?我应该为此担心吗? 有人可以让我知道如何填充pg_stat_activity吗?如果我正在执行查询,例如Select * from pg_stat_activity它是否从postgres维护的某些快照中生成详细信息,或者它检查在postgres中打开的当前连接以提供详细信息?
14 postgresql 

1
从Postgres查询非ASCII行
是否[:ascii:]在所有的Postgres类的工作?在他们的帮助中没有列出它,但是我在网络上看到一些利用它的示例。 我有一个UTF-8数据库,其中归类和c_typ e是en_US.UTF-8,而Postgres版本是9.6.2。当我搜索这样的非ASCII行时: select title from wallabag_entry where title ~ '[^[:ascii:]]'; 我同时获得了 Unicode和非Unicode符号(完整的输出在): Сталинская правозащитница: мать Меленкова бабушка Настя Дневник НКВДиста Шабалина: Знает ли Москва положение на фронте? Бег по городу и поездка на осле: как в средневековье наказывали прелюбодеев Как комиссар Крекшин в 1740-е чуть не отменил историю России …

2
什么索引可用于大量重复值?
让我们做一些假设: 我有这样的表: a | b ---+--- a | -1 a | 17 ... a | 21 c | 17 c | -3 ... c | 22 关于我的场景的事实: 整个表的大小是〜10 10行。 我有〜100k行,其中acolumn中有值,a其他值也类似(例如c)。 这意味着“ a”列中的〜100k个不同的值。 我的大部分查询将读取例如中的给定值的全部或大部分值select sum(b) from t where a = 'c'。 该表以这样的方式编写,即连续值在物理上接近(或者按顺序编写,或者我们假设CLUSTER已在该表和column上使用过a)。 该表很少更新(如果有的话),我们只关心读取速度。 该表相对较窄(例如每个元组约25个字节,+ 23个字节的开销)。 现在的问题是,我应该使用哪种索引?我的理解是: BTree我的问题是BTree索引将是巨大的,因为据我所知它将存储重复值(它必须这样做,因为它不能假定表是物理排序的)。如果BTree很大,那么我最终必须同时读取索引和该索引指向的表的各个部分。(我们可以用来fillfactor = 100稍微减小索引的大小。) BRIN我的理解是,我可以在这里建立一个小的索引,而以阅读无用的页面为代价。使用较小的值pages_per_range表示索引较大(这是BRIN的问题,因为我需要读取整个索引),使用较大的值pages_per_range表示我将读取很多无用的页面。pages_per_range考虑到这些折衷,是否有一个神奇的公式可以找到一个好的价值? GIN …

2
为什么array_agg()比非聚合ARRAY()构造函数慢?
我只是在回顾一些为8.4之前的PostgreSQL编写的旧代码,我发现确实很不错。我记得以前有一个自定义函数来执行某些操作,但我忘记了它的外观array_agg()。为了进行回顾,现代聚合是这样写的。 SELECT array_agg(x ORDER BY x DESC) FROM foobar; 但是,从前,它是这样写的, SELECT ARRAY(SELECT x FROM foobar ORDER BY x DESC); 因此,我尝试了一些测试数据。 CREATE TEMP TABLE foobar AS SELECT * FROM generate_series(1,1e7) AS t(x); 结果令人惊讶。#OldSchoolCool方法大大提高了速度:加快了25%。而且,在不使用ORDER的情况下对其进行简化显示出相同的慢度。 # EXPLAIN ANALYZE SELECT ARRAY(SELECT x FROM foobar); QUERY PLAN ----------------------------------------------------------------------------------------------------------------------------- Result (cost=104425.28..104425.29 rows=1 width=0) (actual time=1665.948..1665.949 rows=1 …

2
从CTE内部调用时未执行PostgreSQL函数
只是希望确认我的观察并获得关于为什么发生这种情况的解释。 我有一个函数定义为: CREATE OR REPLACE FUNCTION "public"."__post_users_id_coin" ("coins" integer, "userid" integer) RETURNS TABLE (id integer) AS ' UPDATE users SET coin = coin + coins WHERE userid = users.id RETURNING users.id' LANGUAGE "sql" COST 100 ROWS 1000 VOLATILE RETURNS NULL ON NULL INPUT SECURITY INVOKER 当我从CTE调用此函数时,它将执行SQL命令,但不会触发该函数,例如: WITH test AS (SELECT …
14 postgresql  cte 

2
PostgreSQL:模式差异/补丁工具
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为数据库管理员Stack Exchange 的主题。 5年前关闭。 请考虑以下设置: 生产数据库 开发数据库,​​对其进行架构更改以启用新功能 新功能的开发完成后,我必须手动更新prod db模式,直到pg_dump --schema-only两个DB上的相同。此过程容易出错且乏味。 因此,我正在寻找一种可以实现以下目的的工具: 显示两个架构(例如diff)之间差异的摘要。请注意,我不是在寻找模式的文本差异,而是在寻找可以得出结论的更复杂的工具,例如“表X具有新列Y”。 自动生成将一种模式转换为另一种模式的SQL代码(如patch) 是否有一个架构差异 / 补丁工具可以帮助我将产品架构转换为更高级的开发架构?

1
优化大型数据库查询(25+百万行,使用max()和GROUP BY)
我使用的是Postgres 9.3.5,并且数据库中有一个大表,目前它有2500万行,而且它往往会迅速增大。我正在尝试通过一个简单的查询来选择特定的行(所有行都unit_id只有最新的行unit_timestamp),例如: SELECT unit_id, max(unit_timestamp) AS latest_timestamp FROM all_units GROUP BY unit_id; 没有任何索引,此查询大约需要35秒才能执行。使用定义的索引(CREATE INDEX partial_idx ON all_units (unit_id, unit_timestamp DESC);),查询时间缩短到(仅)19秒左右。 我想知道是否有可能在更短的时间内(例如几秒钟)执行我的查询,如果可以,我应该采取什么步骤来进一步优化它? 我的表结构转储如下所示: CREATE TABLE "all_units" ( "unit_id" int4 NOT NULL, "unit_timestamp" timestamp(6) NOT NULL, "lon" float4, "lat" float4, "speed" float4, "status" varchar(255) COLLATE "default" ) ALTER TABLE "all_units" ADD PRIMARY …

2
官方PostgreSQL大写约定[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 5年前关闭。 是否有关于DB,表和字段名中大写字母的正式PostreSQL约定? 将在官方网站上的例子表明一个小写字母和_单词的分离,我不知道这个策略是否正式。 CREATE TABLE films ( code char(5) CONSTRAINT firstkey PRIMARY KEY, title varchar(40) NOT NULL, did integer NOT NULL, date_prod date, kind varchar(10), len interval hour to minute );

3
更新json数据类型中的json元素
我不知道如何更新PostgreSQL 9.3数据类型中的元素。 我的例子: CREATE TABLE "user" ( id uuid NOT NULL, password character varying(255), profiles json, gender integer NOT NULL DEFAULT 0, created timestamp with time zone, connected timestamp with time zone, modified timestamp with time zone, active integer NOT NULL DEFAULT 1, settings json, seo character varying(255) NOT NULL, …

2
高效的查询,以从大表中获取每个组的最大价值
给定表: Column | Type id | integer latitude | numeric(9,6) longitude | numeric(9,6) speed | integer equipment_id | integer created_at | timestamp without time zone Indexes: "geoposition_records_pkey" PRIMARY KEY, btree (id) 该表有2000万条记录,相对而言,这不是一个很大的记录。但这会使顺序扫描变慢。 如何获得max(created_at)每个记录的最后一条记录()equipment_id? 我已经尝试了以下两个查询,并阅读了有关该主题的许多答案的几种变体: select max(created_at),equipment_id from geoposition_records group by equipment_id; select distinct on (equipment_id) equipment_id,created_at from geoposition_records order by …

4
使用GROUP BY和ORDER BY对大表进行慢查询
我有一张桌子,上面有720万个元组,看起来像这样: table public.methods column | type | attributes --------+-----------------------+---------------------------------------------------- id | integer | not null DEFAULT nextval('methodkey'::regclass) hash | character varying(32) | not null string | character varying | not null method | character varying | not null file | character varying | not null type | character varying | …

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.