动态创建的用户无法查询包含大对象的表,因为它最初不是创建的。
我有一个跨2 个实例部署到 AWS 的 Java Atom Hopper 应用程序,这两个实例都使用托管在 RDS 中的Postgres 9.5.2数据库。
数据库凭据存储在Vault 中,它为 Postgres 中的数据库生成新的登录名和密码。此用户是使用以下权限创建的。
CREATE ROLE "{{name}}" WITH INHERIT LOGIN PASSWORD '{{password}}' VALID UNTIL '{{expiration}}';GRANT ALL PRIVILEGES on DATABASE "DATABASE_NAME" to "{{name}}";GRANT databaserole to "{{name}}";
Run Code Online (Sandbox Code Playgroud)
这意味着每次 Java 应用程序启动时,它都会向Vault发送请求,以获取新的用户名和密码。
eg. username: token-1234-5678
=> \du
Role name | Attributes | Member of
-----------------+-----------------------------------------------+----------------
token-1234-5678 | Password valid until 2016-09-11 09:57:14+00 | {databaserole} (java instance 1) …Run Code Online (Sandbox Code Playgroud) 有什么区别:
vacuum;
Run Code Online (Sandbox Code Playgroud)
和
vacuum analyze;
Run Code Online (Sandbox Code Playgroud)
我阅读了postgresql手册,但这对我来说仍然不是 100% 清楚。
我需要同时运行两者,还是其中一个就足够了?
我正在尝试从 PostgreSQL 数据库users_data_circulation中导出图像文件。该表有一个photo(bytea) 列。
我的命令:
copy (select encode(photo,'hex') from users_data_circulation limit 1)
TO '/tmp/imagetest.hext';
Run Code Online (Sandbox Code Playgroud)
在操作系统中:
$> xxd -p -r /tmp/imagetest.hex > /tmp/imagetest.jpg
$> file /tmp/imagetest.jpg
/tmp/imagetest.jpg: ASCII TEXT
Run Code Online (Sandbox Code Playgroud)
我无法打开jpg文件。我怎样才能把这个文件转换成jpg?
devinim@devinimpostgresql:~$ hexdump -C /tmp/image.hex | more
00000000 5c 5c 33 37 37 5c 5c 33 33 30 5c 5c 33 37 37 5c |\\377\\330\\377\|
00000010 5c 33 34 30 5c 5c 30 30 30 10 4a 46 49 46 5c 5c |\340\\000.JFIF\\|
00000020 30 30 …Run Code Online (Sandbox Code Playgroud) 考虑我有两个表Employee和Department下面给出的字段:
员工:
Fname、Minit、Lname、SsnBdate、地址、性别、薪水、Super_ssn、Dno
部门:
Dname, Dnumber, Mgr_ssn, Mgr_start_date
Italics and code block 表示表的主键。
在上述情况下,Super_Ssn引用SSN员工,而DNO引用该部的Dnumber。为它们创建 sql 非常简单,首先添加列,然后在形成两个表时更改它们。但是,在插入如下所示的数据时:
insert into employee values('James','E','Borg','888665555','1937-11-10','asda','M',55000,NULL,1);
ERROR: insert or update on table "employee" violates foreign key constraint "dno_ref_dnum_dpt"
DETAIL: Key (dno)=(1) is not present in table "department".
Run Code Online (Sandbox Code Playgroud)
和
insert into sp0090.department values ('Headquarter',1,'888665555','1981-06-19');
ERROR: insert or update on table "department" violates foreign key constraint "department_mgr_ssn_fkey"
DETAIL: Key (mgr_ssn)=(888665555) is not …Run Code Online (Sandbox Code Playgroud) 我想从前一行减法结果中动态减去,作为输入,我想给出一个数字。
我有桌子 a
CREATE TABLE a (id int, code text, qty numeric);
Run Code Online (Sandbox Code Playgroud)
还有里面的数据
INSERT INTO a (id,code,qty)
(1,'test',5),
(2,'test',3),
(3,'test',10);
Run Code Online (Sandbox Code Playgroud)
1.sample - 当输入是16- 期望的结果是:
id | qty
--------------
1 | 0
2 | 0
3 | 2
Run Code Online (Sandbox Code Playgroud)
计算将是这样的
case when 16 > 5 then 16-5 else 5-16 end /* result 11, but displayed 0 */
case when 11 > 3 then 11-3 else 3-11 end /* result 8, but displayed 0 */
case when 8 > 10 then …Run Code Online (Sandbox Code Playgroud) 在 PostgreSQL 9.5 中,为了监控流复制延迟,我使用了以下组合:
前两个函数用于确定主备之间是否存在任何滞后。如果有一些滞后,那么我确定它:
select now() - pg_last_xact_replay_timestamp();
Run Code Online (Sandbox Code Playgroud)
大多数情况下,它返回合理的数量——几秒到几分钟的滞后。但是,该语句偶尔会返回不太可能的大值。几天的滞后。
我们的系统中没有任何交易运行那么长时间,甚至没有关闭。
谁能建议这里发生了什么?
我正在努力从我的 PostgreSQL 数据库中的 JSON 列中获取数据。在我们的users表中,我们有一known_ips列,它是一个 JSON 列,保存给定用户已知的 IP 地址的平面数组,如下所示:
# select email, known_ips from users limit 3;
email | known_ips
-------------------+-------------------------------
user1@example.com | ["192.168.1.1","192.168.1.2"]
user2@example.com | ["192.168.1.3"]
user3@example.com | ["192.168.1.2"]
(3 rows)
Run Code Online (Sandbox Code Playgroud)
我想要做的是从其列中的一组 IP 地址(在本例中为 192.168.1.1 或 192.168.1.2)中选择具有 IP 地址的所有用户known_ips。因此,在这种情况下,user1 和 user3 的 IP 地址为 .1 或 .2,因此我希望返回它们,而不是 user2,因为我不是在寻找 .3 地址。
我尝试了以下查询,但都无济于事:
database=# select email, ip from users, json_array_elements(known_ips) as ip where ip in("192.168.1.1","192.168.1.2");
ERROR: column "192.168.1.1" does not exist
LINE 1: ... json_array_elements(known_ips) …Run Code Online (Sandbox Code Playgroud)我在寻找解决以下问题的最佳选择时遇到了问题(postgres 9.5):
我一次从另一个系统获得大约 100.000 行的更新批次。这种情况通常每 10-15 分钟发生一次,但我可能会同时收到多个批次。批次由“类别”分隔,一个批次只包含来自一个批次的数据。每个“类别”每 10-15 分钟更新一次。新行被插入,旧行被删除,仍然存在的行应该更新为新值。
这带来了表产生大量垃圾数据、VACUUM 进程运行非常缓慢以及一般表性能非常差的问题。
现在我想我可以通过为数据中的每个“类别”创建子表并因此“分片”数据来解决这个问题。
在这种情况下,这是否有意义,还是有更好的选择让我坚持?
FROM提供column_alias,SQL 规范调用这些<derived column list>子句。这就是 postgres 文档对它们的描述,
FROM包含别名的项目的替代名称。别名用于简洁或消除自联接(多次扫描同一个表)的歧义。当提供别名时,它完全隐藏了表或函数的实际名称;例如 givenFROM foo AS f, 的其余部分SELECT必须将此FROM项目称为fnotfoo。如果编写了别名,还可以编写列别名列表来为表的一列或多列提供替代名称。
什么时候需要这些?我什么时候不能只使用 COLUMN 别名?
SELECT t.*
FROM table_name AS t (a,b,c);
Run Code Online (Sandbox Code Playgroud)
对比
SELECT t.col1 AS a, t.col2 AS b, t.col3 AS c
FROM table_name AS t;
Run Code Online (Sandbox Code Playgroud)
这个例子取自@ypercube 选择的答案??这似乎不太有用。
上述上下文中的 FROM 别名不会提供真正的好处,除非您是
这样做似乎依赖于常规t.*堆叠的危害,并增加了晦涩。那么什么时候FROM别名有用呢?
我对 Postgres 中的模式所有者感到困惑。
当我使用AUTHORIZATION关键字定义的所有者创建模式时,所有者可以在该模式中创建对象(pgAdmin4 中的该模式没有显示显式权限)。
但是,当我将架构所有者更改为另一个角色时,此角色无法在该架构中创建对象(除非我明确授予USAGE和CREATE)。
我想,该架构所有者具有对架构执行任何操作的隐式特权。更改架构所有者芯片的正确方法是什么?
postgresql ×10
alias ×1
bytea ×1
export ×1
foreign-key ×1
insert ×1
json ×1
monitoring ×1
permissions ×1
replication ×1
syntax ×1
users ×1