Tag: postgresql

在Postgres中转义类似关键字的列名

如果Postgres表中的列名称year ,如何看INSERT查询来设置该列的值? 例如: INSERT INTO table (id, name, year) VALUES ( … ); 在年份词语附近给出一个错误。

如何search所有表(PostgreSQL)中的特定值?

类似的问题可以在这里find ,但是它是针对Oracle的。 我对PostgreSQL有同样的问题。 简而言之,是否可以在PostgreSQL中search每个表的每个字段以获取特定的值? 谢谢。

PostgreSQL 9.2 row_to_json()与嵌套连接

我试图使用在PostgreSQL 9.2中添加的row_to_json()函数将查询的结果映射到JSON。 我无法找出将连接行表示为嵌套对象的最佳方式(1:1关系) 这是我试过的(设置代码:表,示例数据,然后查询): — some test tables to start out with: create table role_duties ( id serial primary key, name varchar ); create table user_roles ( id serial primary key, name varchar, description varchar, duty_id int, foreign key (duty_id) references role_duties(id) ); create table users ( id serial primary key, name varchar, email varchar, […]

如何在PostgreSQL中进行更新+join?

基本上我想这样做: update vehicles_vehicle v join shipments_shipment s on v.shipment_id=s.id set v.price=s.price_per_vehicle; 我敢肯定,这将在MySQL(我的背景)工作,但它似乎并没有在postgres工作。 我得到的错误是: ERROR: syntax error at or near "join" LINE 1: update vehicles_vehicle v join shipments_shipment s on v.shi… ^ 当然有一个简单的方法来做到这一点,但我找不到合适的语法。 那么,我将如何在PostgreSQL中编写这个?

标准化1维数组的数组下标,以1开头

PostgreSQL可以在任何地方使用数组下标。 考虑这个例子,它创build一个数组,其中包含3个下标5到7的元素: SELECT ('[5:7]={1,2,3}'::int[]); 返回: [5:7]={1,2,3} 意思是,例如,你得到第一个元素 SELECT ('[5:7]={1,2,3}'::int[])[5]; 我想规范 任何给定的1维数组开始数组下标1 。 最好的我可以拿出: SELECT ('[5:7]={1,2,3}'::int[])[array_lower('[5:7]={1,2,3}'::int[], 1):array_upper('[5:7]={1,2,3}'::int[], 1)] 或者,相同,更容易阅读: WITH x(a) AS ( SELECT '[5:7]={1,2,3}'::int[] ) SELECT a[array_lower(a, 1):array_upper(a, 1)] FROM x 你知道更简单/更快或至less更优雅的方式吗? 基准 为了testing性能,我掀起了这个快速的基准。 100k行表,简单的整数数组,随机长度在1和11之间: CREATE TEMP TABLE t (a int[]); INSERT INTO t — now with actually varying subscripts SELECT ('[' || g%10 || […]

PostgreSQL对数组元素有唯一性约束吗?

我试图为当前在LDAP存储中的主机数据提出一个PostgreSQL模式。 部分数据是机器可以拥有的主机名称列表,该属性通常是大多数人用来查找主机logging的关键。 我希望摆脱这种数据到RDBMS的一件事是能够设置主机名列的唯一性约束,以便重复的主机名不能分配。 如果主机只能有一个名字,那么这很容易,但是由于它们可以有多个,所以它更复杂。 我意识到完全规范化的方法是使用外键指向主机表的主机名表,但是我希望避免每个人都需要为最简单的查询进行连接: select hostnames.name,hosts.* from hostnames,hosts where hostnames.name = 'foobar' and hostnames.host_id = hosts.id; 我想使用PostgreSQL数组可以为此工作,他们当然使简单的查询简单: select * from hosts where names @> '{foobar}'; 当我在hostnames属性上设置唯一性约束时,它当然会将整个名称列表视为唯一值而不是每个名称。 有没有办法让每个行中的每个名称都是唯一的呢? 如果不是的话,有没有人知道另一种更有意义的数据build模方法?

计算PostgreSQL中两个date之间的工作时间

我正在开发一个使用Postgres(PL / pgSQL)的algorithm,我需要计算两个时间戳之间的工作小时数,考虑到周末不工作,剩下的时间只在上午8点到下午15点之间计算。 例子: 从12月3日下午14点到12月4日上午9点应该算两个小时: 3rd = 1, 4th = 1 从12月3日下午15点到12月7日上午8点应计算8小时: 3rd = 0, 4th = 8, 5th = 0, 6th = 0, 7th = 0 考虑小时数也是很好的。

PostgreSQL中是否有类似zip()函数的组合两个数组?

我在PostgreSQL中有两个相同长度的数组值: {a,b,c}和{d,e,f} 我想把它们结合起来 {{a,d},{b,e},{c,f}} 有没有办法做到这一点?

将用户标识传递给PostgreSQL触发器

我正在使用PostgreSQL 9.1。 我的数据库是结构化的,以便有我的应用程序使用的实际表。 对于每个表都有历史表,只存储更改历史logging。 历史表包含相同的字段,实际表格加上字段形成一些额外的信息,例如。 编辑时间。 历史logging表只能由触发器处理。 我有两种触发器: Before INSERT触发器在创build表时添加一些额外的信息(例如create_time)。 Before UPDATE触发器before DELETE和before DELETE触发器before DELETE ,将旧的值从实际表格复制到历史表格。 问题是我想使用触发器来存储进行这些更改的用户的ID。 而由id我的意思是从PHP应用程序的ID,而不是PostgreSQL的用户ID。 有没有合理的方法来做到这一点? 通过INSERT和UPDATE,可以为实际表添加额外的id字段,并将用户ID作为SQL查询的一部分传递给SQL。 据我所知,这不适用于DELETE。 所有触发器的结构如下: CREATE OR REPLACE FUNCTION before_delete_customer() RETURNS trigger AS $BODY$ BEGIN INSERT INTO _customer ( edited_by, edit_time, field1, field2, …, fieldN ) VALUES ( -1, // <- This should be user id. NOW(), OLD.field1, […]

Apache Spark的主键

我有一个与Apache Spark和PostgreSQL的JDBC连接,我想插入一些数据到我的数据库。 当我使用append模式时,我需要为每个DataFrame.Row指定id 。 有什么办法让Spark创build主键?