我正在尝试执行这个简单的查询,以检查某个值(1000)是否属于 Postgres 查询优化器使用的 MCV 列表:
SELECT array_position(most_common_vals, 1000)
FROM pg_stats
WHERE tablename = 'tenk1'
AND attname = 'unique1';
Run Code Online (Sandbox Code Playgroud)
但收到以下错误消息:
Run Code Online (Sandbox Code Playgroud)ERROR: function array_position(anyarray, integer) does not exist
如何解决?
array_position()是此处描述的标准函数,以下语句按预期返回2:
SELECT array_position('{1,2,3}', 2);
Run Code Online (Sandbox Code Playgroud) postgresql performance datatypes array postgresql-performance
我有一个具有以下结构的数据库表:
id | created
-------+---------------
1 | 2018-07-23 00:01:00
2 | 2018-07-23 00:02:00
...
Run Code Online (Sandbox Code Playgroud)
现在我想返回与下一行的时间差大于 10 秒的所有行。
我尝试过使用 Postgres 窗口函数,但无法让它工作,例如
SELECT
created,
created - lag(created, 1) OVER (ORDER BY created) delta
FROM tablename
where created - lag(created, 1) OVER (ORDER BY created) > interval '10 seconds'
ORDER BY created;
Run Code Online (Sandbox Code Playgroud)
我得到的错误是我不允许在WHERE子句中使用窗口函数。如何做到这一点?
考虑一下:
UPDATE dest
SET dest_col = (SELECT s.src_col FROM source s
WHERE s.name = 'abc'
ORDER BY random() LIMIT 1 OFFSET 0);
Run Code Online (Sandbox Code Playgroud)
我的目标:将每一行设置dest.dest_col为从子查询匹配的所有值中随机选取的值。
为了实现这一点,我添加了ORDER BY random() LIMIT 1. 但这是通过选择一个随机值一次,然后将其设置到dest.dest_col.
我尝试添加OFFSET 0(在其他答案中建议作为防止 Postgres 优化子查询的方法),但这似乎没有任何效果。
另请注意,我需要它才能在 GCP 上运行的 PostgreSQL 上工作。
我正在尝试获取有关数据库中数据的信息。我在几个表中有几列输入“TEXT”。我想执行一个查询,该查询将创建如下所示的结果:
|table_name|column_name|max_length|
-----------------------------------
|my_table |name |35 |
Run Code Online (Sandbox Code Playgroud)
我有查询来获取所有表和列:
SELECT table_name, column_name FROM information_schema.columns
WHERE table_schema = 'public' AND data_type = 'text'
ORDER BY table_name
Run Code Online (Sandbox Code Playgroud)
但我现在不知道如何遍历每个表和列以获得每列的最大长度。我确实有一个查询来获取特定列和表的最大长度:
SELECT 'my_table', 'name', MAX(LENGTH(name)) FROM my_table
Run Code Online (Sandbox Code Playgroud)
如何进行查询,根据查询结果动态获取最大长度以获取所有表和列?
查看文档后,我知道您可以使用以下命令授予连接和创建权限:
GRANT CREATE ON DATABASE <db_name> TO user;
GRANT CONNECT ON DATABASE <db_name> TO user;
Run Code Online (Sandbox Code Playgroud)
如何在不指定数据库名称的情况下授予当前数据库的这些权限?
我正在尝试编写一个脚本,每当我的应用程序创建新数据库时,该脚本将用于授予所有权限,因此我不知道编写脚本时的名称是什么。
我有一个表t和一些可以访问的函数t。例如:
create function list_t() returns setof t as $$
select * from t;
$$ language sql stable;
Run Code Online (Sandbox Code Playgroud)
是否可以将角色权限定义为仅允许执行list_t(),而不允许普通SELECT、UPDATE和查询DELETE?INSERTt
我尝试了以下方法:
grant execute on all functions in schema public to my_user;
revoke all on t from my_user;
Run Code Online (Sandbox Code Playgroud)
虽然这确实不允许SELECT * FROM t,但也不允许SELECT list_t()。
与此相同的问题:How to edit postgresql.confwith pgAdmin 3? 但更新为全新的(完全重写)pgAdmin 4。
\xe2\x9e\xa5 如何使用pgAdmin 4应用程序编辑配置文件?
\n\n我添加了adminpack扩展,如此处所述。我重新启动了pgAdmin 4。然而我无法识别任何菜单项或其他界面项来编辑此文件。
\nEnterpriseDB.com 向社区提供的Postgres 安装程序通常会在macOSpostgres上创建一个用户帐户。
在Terminal.app的控制台会话中,我需要切换到该用户。我的目标是使用该 user\xe2\x80\x99s 权限运行文本编辑器,以便我可以编辑pg_hba.conf控制 Postgres 用户身份验证规则的文件。
当我尝试时:
\n\nsu - postgres\nRun Code Online (Sandbox Code Playgroud)\n\n\xe2\x80\xa6 系统提示我输入用户密码,我输入成功,但收到错误消息:
\n\n\n\n\n苏:对不起
\n
我确信密码是正确的。我可以做什么来访问该postgres用户?
我们如何将 postgres 数组 :- 转换ARRAY['{"id": "1"}', '{"id": "2"}']为 JSONB'[{"id": "1"}, {"id": "2"}]'
如何防止给定表中任何记录的更新,但允许插入,我已经创建了一个阻止更新的触发器,但我发现它也阻止插入。
编辑
我可以从数据库本身插入新行/记录,但不能从连接到该数据库的应用程序的新记录的表单中插入新行/记录,提交表单后,正在执行触发器。
它是一个使用 Django 构建的 Web 应用程序。
触发功能
CREATE OR REPLACE FUNCTION prevent_updte()
RETURNS trigger AS
$BODY$
BEGIN
RAISE EXCEPTION 'Data modification not allowed';
END;
$BODY$
LANGUAGE plpgsql
Run Code Online (Sandbox Code Playgroud)
扳机
CREATE Trigger prevent_update
BEFORE UPDATE ON purchases_purchase
FOR EACH ROW
EXECUTE PROCEDURE prevent_update();
Run Code Online (Sandbox Code Playgroud) postgresql ×10
permissions ×3
acl ×1
array ×1
datatypes ×1
dynamic-sql ×1
performance ×1
pgadmin-4 ×1
plpgsql ×1
role ×1
trigger ×1
users ×1