Questions tagged «postgresql»

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

3
如何使用PLPGSQL确定当前search_path中是否存在表?
我正在为一个应用程序编写安装脚本,该脚本是另一个应用程序的附件,因此我想检查另一个应用程序的表是否存在。如果没有,我想给用户一个有用的错误。但是,我不知道哪种模式将保存表格。 DO LANGUAGE plpgsql $$ BEGIN PERFORM 1 FROM pg_catalog.pg_class c JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace WHERE n.nspname = current_setting('search_path') AND c.relname = 'foo' AND c.relkind = 'r'; -- not sure if I actually need this or not... IF NOT FOUND THEN RAISE 'This application depends on tables …

1
PostgreSQL:从视图中删除列
我VIEW正在尝试为其创建演化脚本的位置,因此可以在其中添加一列。那部分工作正常;列添加就好了。但是,相反的方法无效。删除最后添加的列失败并显示一条ERROR: cannot drop columns from view消息。问题在于,这个特定的视图有很多引用,包括从和到的引用,因此,我不能只是DROP CASCADE一个令人毛骨悚然的东西! 为什么无法从给定中删除新添加的列VIEW?然后,我该怎么做才能完成此任务? (注意:这里是实际情况,但在许多其他情况下,我也很可能会看到类似的情况,也就是从视图中删除列。)

3
对billions-rows-table的查询变慢//使用的索引
由于我是一名年轻的开发人员,并且不太熟练使用数据库(PostgreSQL 9.3),因此我在一个项目中遇到了一些问题,我确实需要帮助。 我的项目是关于从设备(最多1000台或更多设备)收集数据的,其中每台设备每秒发送一个数据块,每小时大约发送300万行。 目前,我有一张大表,用于存储每个设备的传入数据: CREATE TABLE data_block( id bigserial timestamp timestamp mac bigint ) 由于数据块可以(或不能)包含多种数据类型,因此还有其他表引用该data_block表。 CREATE TABLE dataA( data_block_id bigserial data CONSTRAINT fkey FOREIGN KEY (data_block_id) REFERENCES data_block(id); ); CREATE TABLE dataB(...); CREATE TABLE dataC(...); CREATE INDEX index_dataA_block_id ON dataA (data_block_id DESC); ... 一个data_block中可能有3x dataA,1x dataB但没有dataC。 数据将保留几周,因此该表中将有约50亿行。目前,表中有约6亿行,而我的查询要花很长时间。因此,我决定在timestamp和上建立索引mac,因为我的select语句总是随时间查询,通常也随时间+ mac查询。 CREATE INDEX …

2
在PostgreSQL中通过“ psycopg2”进行的事务是按游标还是按连接进行的?
我正在使用psycopg2数据库API 对PostgreSQL 9.3进行一些工作。 我将数据库API设置为最低隔离级别(“自动提交”模式),并且正在直接通过SQL管理自己的事务。例: cur = self.conn.cursor() cur.execute("BEGIN;") cur.execute("SELECT dbId, downloadPath, fileName, tags FROM {tableName} WHERE dlState=%s".format(tableName=self.tableName), (2, )) ret = cur.fetchall() cur.execute("COMMIT;") 基本上,是由该事务启动的事务cur.execute("BEGIN;")仅限于该游标,还是整个连接(self.conn.cursor())? 我正在做的一些更复杂的事情涉及多个单独的数据库操作,这些操作我从逻辑上分解为功能。因为所有这些都在具有作为成员的连接的类中,所以在每个函数中创建游标要方便得多。但是,我不确定在事务中创建游标的工作方式。 基本上,如果事务是按连接的,我可以在事务中即时创建大量游标。如果它们是每个光标,那意味着我必须在各处传递光标。哪有 文档没有涉及到这一点,尽管您可以打电话的事实connection.commit()使我相当有信心事务控制是针对每个连接的。
10 postgresql 

2
PostgreSQL是否优化添加具有非NULL默认值的列?
在添加NOT NULL带有DEFAULT值的列时-PostgreSQL是否优化了此操作? 如果表有n行,那么未优化的alter-table-add-column将产生默认值的n次写入-显然,这很痛苦。通过优化,数据库将立即创建新列,仅存储默认值的一个副本,当在合适的索引数据结构中找不到该列的非默认值时将返回该默认值。 例如,Oracle 11g进行了这样的优化。

2
PostgreSQL中复合索引中的列顺序(和查询顺序)
我有一张有5万行的表格。它实际上是一个PostGIS表。 该查询分为4个部分(1个必填项)(3个可选) 长4纬度(我使用st_intersects)的相交箱(地理矩形)[必须] 日期字段上的日期范围(最小,最大) 当前使用IN(.....)的文件类型(最多8个文本值的集合),但是如果需要,我可以将其设为临时表。我看到很多人不喜欢IN。 国家(文本值)。 我预计将返回约100-4,000行 如果在表上创建复合索引,则应首先使用哪一列。细粒度可能是位置(数据分布在世界各地)。我目前将其作为GIST索引。 其他索引将是BTREE。 我的直觉说,使用细颗粒,最后选择。例如,只有大约12种文件类型,因此对于索引而言这将是非常大的存储桶。 PostgreSQL和PostGIS专家(谁知道系统的内部结构)怎么说? 更新: 让我提出这个问题。 我不希望任何人必须做我应该做的工作。我非常尊重您的时间。因此我将在后面进行解释分析。 我所寻找的只是一些指示,技巧和指南。 我阅读了这篇出色的小文章:https : //devcenter.heroku.com/articles/postgresql-indexes#managing-and-maintaining-indexes关于索引 我通常要做的是创建4个单独的索引(地理框,国家/地区名称,file_type和日期),但是要查看复合查询的作用。 告诉我这些假设是否有误。(我对复合索引的想法很陌生) 顺序很重要。选择最能减少行数的索引作为第一个索引(在我的情况下,简单的多边形或多多边形的位置(地理位置)将是最好的)。 有时查询会跳过索引。但是,如果我使用键(#1,#2,#3,#4)创建了一个复合查询,那么即使用户创建了要求#1,#3的内容,计划者仍会使用单个复合查询,因为他们要订购被维持。 通常,我将创建三个BTREE查询和一个GIST(针对地理位置类型)。PostGIS不支持从多个索引类型创建复合。因此,我将不得不使用GIST复合索引。但这不应该伤害任何事情。 如果我确实创建了其他一些复合或单值索引,则计划程序足够聪明,可以选择最聪明的一个。 国家/地区名称可以有大约250个不同的值,并且显然与位置(地理框)紧密相关,但是如果要减小行大小的下一个最佳索引是file_type,我应该在下一个使用。我不希望用户在他们的查询集中经常使用国家或日期。 我不必担心创建4个键的复合索引会大大增加索引数据的大小。即,如果一键索引将是性能提升的90%,那么再添加3项使其复利也不会有什么坏处。相反,我应该真正创建两个索引。一个单一的地理索引,还有一个复合索引,然后让计划者确定哪一个是最佳的,并且它将考虑索引表的大小。 再说一次,我不是要任何人来设计我的解决方案,也不是要别人的工作。但是我确实需要PostGreSQL文档不会告诉我有关实现的内容 [我没有显示EXPLAIN结果的原因是,我必须从24M行表中创建此25K行表。这比我想象的要花费更多的时间。我将事物分为1,000个项目组,并让用户针对25K行表进行查询。但是,我的下一个问题将涉及使用该查询的结果转到MASTER 25M行表并提取内容,这就是复合索引的性能真正达到HIT的位置。 下面的示例查询: SELECT public.product_list_meta_mv.cntry_name AS country, public.product_list_meta_mv.product_producer AS producer, public.product_list_meta_mv.product_name AS prod_name, public.product_list_meta_mv.product_type AS ptype, public.product_list_meta_mv.product_size AS size, ST_AsGeoJSON(public.product_list_meta_mv.the_geom, 10, 2) AS …

1
加强约束“两张桌子”
我在用SQL建模电气原理图时遇到了一些麻烦。我想捕捉的结构是 part ←────────── pin ↑ ↑ part_inst ←───── pin_inst 其中“实例”是“实例”的缩写。 例如,作为partLM358运算放大器,我可能具有pins 1OUT,1IN-,1IN +,GND,2IN +,2IN-,2OUT和V CC。然后,我可能将此零件放在原理图上,并创建一个part_inst和8 pin_insts。 忽略数据字段,我最初对模式的尝试是 create table parts ( part_id bigserial primary key ); create table pins ( pin_id bigserial primary key, part_id bigint not null references parts ); create table part_insts ( part_inst_id bigserial primary key, part_id …

3
使用命令行更改PostgreSQL端口
我的PostgreSQL默认端口是5432,我想使用命令行更改默认端口(在Windows 7中)。 我之前看到过这个解决方案:https : //stackoverflow.com/questions/187438/want-to-change-pgsql-port 我尝试运行以下命令,但失败: postgres --p 5431 有人可以告诉我如何使用命令行更改端口吗?

1
pg_dump和错误:吐司值缺少块编号0
我正在使用PostgreSQL 8.4.15。在运行pg_dump数据库备份时,出现以下错误: pg_dump: SQL command failed pg_dump: Error message from server: ERROR: missing chunk number 0 for toast value 123456789 in pg_toast_987654321 pg_dump: The command was: COPY public.my_table (id, .... all the columns ...) 搜索此错误消息时,我发现了一些引用(此处和此处),它们建议为表重新编制索引。(在这些讨论中,有一个查询pg_class表的参考以找到正确的pg_toast_XXXXXX值,但似乎是因为在错误消息中未显示该值。我跳过了这一部分,因为在错误消息中显示了一个值我想这可能是因为PostgreSQL的更高版本而带来的便利。) 我执行以下操作: REINDEX table pg_toast.pg_toast_987654321; VACUUM ANALYZE my_table; 我现在可以正确使用pg_dump。 什么是pg_toast什么也这个命令的作用呢?这些仅仅是为了简单清理,还是可以摆脱该表中的某些行?首先是什么引起了该问题? 该表中大约有300000行,但是我希望自从上一次成功备份以来,大约只有250个新行(此表仅用于INSERT / SELECT,没有UPDATE)。
10 postgresql 

1
HDD崩溃后启动PostgreSQL服务器会导致FAILED STATE
我使用Fedora 15带PostgreSQL 9.1.4。Fedora最近崩溃了,之后: 尝试启动PostgreSQL服务器: service postgresql-9.1 start 给 Starting postgresql-9.1 (via systemctl): Job failed. See system logs and 'systemctl status' for details. [FAILED] 虽然,在系统重启后第一次启动服务器时,服务器可以正常启动。 但是,尝试使用psql会出现此错误: psql: could not connect to server: No such file or directory Is the server running locally and accepting connections on Unix domain socket "/tmp/.s.PGSQL.5432"? .s.PGSQL.5432文件在系统上任何地方都不存在。A …
10 linux  postgresql 

1
向大表添加串行列的最有效方法
将BIGSERIAL列添加到巨大的表(〜3个Bil。行,〜174Gb)中,最快的方法是什么? 编辑: 我希望该列为现有行(NOT NULL)的增量值。 我没有设置填充因子(回想起来,这似乎是一个错误的决定)。 我的磁盘空间没有问题,只是希望它尽可能快。

4
如何将表数据的子集从生产数据库导出到本地测试数据库中?
我们有一个相对较大的基于postgres的数据库:〜20GB。PostgreSQL数据库托管在heroku上。 我想将表数据的一小部分复制到我的本地数据库中,这样我就可以对它们进行一些测试,而不必进行生产工作。 我不想自己生成样本数据,而是使用生产环境中已经存在的数据。 数据库中每个表的约100行就足够了。有没有简单的方法可以做到这一点?


6
将参数传递给psql
我在Postgres 8.3中运行一个plpgsql脚本-我想通过psql将参数传递给该脚本。我目前正在执行以下脚本: psql -d database -u user -f update_file.sql 我碰到了该链接,该链接解释了PGOPTIONS环境变量,但不适用于“自定义”参数。即我收到一个错误,因为该设置未在postgres.conf文件中列出。 -bash-3.2$ export PGOPTIONS='--pretend=true' -bash-3.2$ psql -d my_db -f update_database.sql psql: FATAL: unrecognized configuration parameter "pretend" 还有其他想法吗?理想情况下,我想避免环境变量...
10 postgresql  psql 


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.