它使用的时候可能pgadmin还是plsql获得查询计划的搁置了内部执行SQL语句ü SER d efined ˚F油膏(UDF)使用EXPLAIN。那么我如何掌握 UDF 的特定调用的查询计划呢?我看到 UDF 抽象为F()pgadmin 中的单个操作。
我查看了文档,但找不到任何内容。
目前我正在提取语句并手动运行它们。但这不会减少大型查询。
例如,考虑下面的 UDF。这个 UDF,即使它能够打印出它的查询字符串,也不能使用复制粘贴,因为它有一个本地创建的临时表,当你粘贴和执行它时它不存在。
CREATE OR REPLACE FUNCTION get_paginated_search_results(
forum_id_ INTEGER,
query_ CHARACTER VARYING,
from_date_ TIMESTAMP WITHOUT TIME ZONE DEFAULT NULL,
to_date_ TIMESTAMP WITHOUT TIME ZONE DEFAULT NULL,
in_categories_ INTEGER[] DEFAULT '{}')
RETURNS SETOF post_result_entry AS $$
DECLARE
join_string CHARACTER VARYING := ' ';
from_where_date CHARACTER VARYING := ' ';
to_where_date CHARACTER VARYING := ' ';
query_string_ CHARACTER VARYING …Run Code Online (Sandbox Code Playgroud) 根据文档,只要我没有连接到数据库,我就可以使用以下命令在控制台中删除数据库:
DROP DATABASE dbname;
Run Code Online (Sandbox Code Playgroud)
或者我可以使用包装器工具删除它dropdb。
两者都给我一个错误,说数据库不存在,但是当在控制台中输入命令时\l,我得到一个数据库列表,包括我想删除的数据库。
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
---------------------------+-----------+----------+-------------+-------------+-----------------------
Blog_development | myusername | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
Blog_test | myusername | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
Run Code Online (Sandbox Code Playgroud)
数据库名称是 Blog_development(以及它下面的名称)。我在玩 rails 并试图从在线文档中学习。我想重新开始并删除所有内容。
然而,当试图删除它时,它说它不存在。我是 PostgreSQL 的新手,所以我有点迷茫,除了在它不存在时弹出之外,文档中没有关于此错误的任何内容。它当然存在,它就在那里。
我在 PostgreSQL 中创建了一些新的 UDT。但是,现在我有两个问题:
不幸的是,我在 PostgreSQL 文档中找不到任何相关内容。
情况 我有一个 postgresql 9.2 数据库,它一直都在大量更新。因此系统受 I/O 限制,我目前正在考虑进行另一次升级,我只需要一些关于从哪里开始改进的指导。
以下是过去 3 个月情况的图片:

如您所见,更新操作占磁盘利用率的大部分。这是另一张更详细的 3 小时窗口中情况的图:

如您所见,峰值写入速率约为 20MB/s
软件
服务器运行 ubuntu 12.04 和 postgresql 9.2。更新类型通常在由 ID 标识的单个行上进行小更新。例如UPDATE cars SET price=some_price, updated_at = some_time_stamp WHERE id = some_id。我已经尽可能多地删除和优化了索引,并且服务器配置(linux 内核和 postgres conf)也非常优化。
硬件 硬件是一个专用服务器,带有 32GB ECC ram、RAID 10 阵列中的 4 个 600GB 15.000 rpm SAS 磁盘,由带有 BBU 的 LSI RAID 控制器和英特尔至强 E3-1245 四核处理器控制。
问题
- - - - - - - - - - - - - - - 更新 …
今天七周内的七个数据库向我介绍了每个操作员的索引。
您可以通过创建
text_pattern_ops运算符类索引来为匹配先前查询的模式索引字符串,只要值以小写形式索引即可。
CREATE INDEX moves_title_pattern ON movies (
(lower(title) text_pattern_ops);
Run Code Online (Sandbox Code Playgroud)
我们使用 是
text_pattern_ops因为标题是文本类型。如果需要指数VARCHAR处理,字符,或名称,使用相关的OPS: ,varchar_pattern_ops,bpchar_pattern_ops和name_pattern_ops。
我觉得这个例子真的很混乱。为什么这样做有用?
如果该列是文本类型,那么在用作搜索值之前,其他类型(varchar、char、name)不会被强制转换为文本吗?
该索引的行为与使用默认运算符的索引有何不同?
CREATE INDEX moves_title_pattern ON movies (lower(title));
Run Code Online (Sandbox Code Playgroud) 我正在使用 PostgreSQL 9.1 并希望恢复使用pg_dump以下命令生成的备份文件:
sudo pg_dump -h 127.0.0.1 -U postgres --clean --inserts -E UTF8 -f out.sql database_name
Run Code Online (Sandbox Code Playgroud)
该命令生成一个有效的 sql 文件,首先删除任何现有的数据库对象,然后生成所有表、索引、序列等,最后插入数据。
当我尝试使用以下方法恢复生成的备份文件时:(添加换行符仅用于显示目的)
sudo pg_restore
-d database_name -h 127.0.0.1 -U postgres
--format=c --clean --create out.sql
Run Code Online (Sandbox Code Playgroud)
它失败并打印:
pg_restore: [archiver] did not find magic string in file header
Run Code Online (Sandbox Code Playgroud)
这是什么原因?
我有一个表,persons它包含两列,一个id和一个基于 JSONB 的data列(这个表只是为了演示目的而制作的,以使用 PostgreSQL 的 JSON 支持)。
现在,假设它包含两条记录:
1, { name: 'John', age: 30 }
2, { name: 'Jane', age: 20 }
Run Code Online (Sandbox Code Playgroud)
现在,假设我想得到每个 25 岁以上的人的名字。我尝试过的是:
select data->'name' as name from persons where data->'age' > 25
Run Code Online (Sandbox Code Playgroud)
不幸的是,这会导致错误。我可以通过使用->>代替来解决它->,但是比较不再按预期工作,因为不是比较数字,而是比较它们作为字符串的表示:
select data->'name' as name from persons where data->>'age' > '25'
Run Code Online (Sandbox Code Playgroud)
然后我发现我实际上可以通过使用->和强制转换来解决这个问题int:
select data->'name' as name from persons where cast(data->'age' as int) > 25
Run Code Online (Sandbox Code Playgroud)
这有效,但我必须知道实际类型并不是那么好(ageJSON 文档中的类型是number无论如何,那么为什么 PostgreSQL …
我们的生产环境今天早上在更改表时冻结*了一段时间,实际上是添加了一列。
违规 SQL:ALTER TABLE cliente ADD COLUMN topicos character varying(20)[];
* 登录到我们的系统需要从同一张表中进行选择,因此在更改表期间没有人可以登录。我们实际上不得不终止进程以让系统恢复正常运行。
表结构:
CREATE TABLE cliente
(
rut character varying(30) NOT NULL,
nombre character varying(150) NOT NULL,
razon_social character varying(150) NOT NULL,
direccion character varying(200) NOT NULL,
comuna character varying(100) NOT NULL,
ciudad character varying(100) NOT NULL,
codigo_pais character varying(3) NOT NULL,
activo boolean DEFAULT true,
id serial NOT NULL,
stock boolean DEFAULT false,
vigente boolean DEFAULT true,
clase integer DEFAULT 1,
plan integer DEFAULT 1,
plantilla character varying(15) …Run Code Online (Sandbox Code Playgroud) 我在 PostgreSQL 9.3 数据库中有两个表: Tablelink_reply有一个which_group指向 table的外键link_group。
我想删除link_group不link_reply存在相关行的所有行。听起来很基本,但我一直在努力。
会不会像这样简单(不工作)?
DELETE FROM link_group WHERE link_reply = NULL;
Run Code Online (Sandbox Code Playgroud) postgresql ×10
backup ×2
performance ×2
alter-table ×1
blocking ×1
cast ×1
catalogs ×1
collation ×1
delete ×1
functions ×1
hardware ×1
index ×1
join ×1
json ×1
operator ×1
pg-dump ×1
plpgsql ×1
replication ×1
update ×1