Tag: postgresql

Postgres – 数组for循环

我在写一个plpgsql脚本。 我想从二维数组中逐个获取数组内容。 DECLARE m varchar[]; arr varchar[][] := array[['key1','val1'],['key2','val2']]; BEGIN for m in select arr LOOP raise NOTICE '%',m; END LOOP; END; 但是上面的代码返回 {{key1,val1},{key2,val2}} 在一行中。 我想能够循环,并调用另一个函数,它需要像这样的参数: another_func(key1,val1)

在plpgsql函数中将表名和列名定义为参数?

它一定很简单,但我正在做我的第一步到Postgres函数,我找不到任何工作… 我想创build一个函数,将修改表和/或列,我找不到指定我的表和列作为我的函数参数的正确方法。 就像是: CREATE OR REPLACE FUNCTION foo(t table) RETURNS void AS $$ BEGIN alter table t add column c1 varchar(20); alter table t add column c2 varchar(20); alter table t add column c3 varchar(20); alter table t add column c4 varchar(20); END; $$ LANGUAGE PLPGSQL; select foo(some_table) 在另一种情况下,我想有一个函数来改变某个表的某个列: CREATE OR REPLACE FUNCTION foo(t table, […]

有没有办法在PostgreSQL中的string值(如eval)内执行查询?

我想这样做: SELECT (EVAL 'SELECT 1') + 1; 在PostgreSQL中有没有办法像这样( EVAL )?

GROUP BY和聚合的顺序数值

使用PostgreSQL 9.0。 比方说,我有一张包含company , profession和year的表格。 我想返回一个结果,其中包含独特的公司和行业,但基于数字序列聚合(到一个数组是罚款)年: 示例表: +—————————–+ | company | profession | year | +———+————+——+ | Google | Programmer | 2000 | | Google | Sales | 2000 | | Google | Sales | 2001 | | Google | Sales | 2002 | | Google | Sales | 2004 | | Mozilla | Sales […]

将行插入到一个查询中的多个表中,从一个涉及的表中进行select

我有两个表格(即,每一个foo链接到一个吧)。 CREATE TABLE foo ( id INTEGER PRIMARY KEY, x INTEGER NOT NULL, y INTEGER NOT NULL, …, bar_id INTEGER UNIQUE NOT NULL, FOREIGN key (bar_id) REFERENCES bar(id) ); CREATE TABLE bar ( id INTEGER PRIMARY KEY, z INTEGER NOT NULL, … ); 在foo中使用嵌套查询来满足特定条件很容易: INSERT INTO foo (…) (SELECT … FROM foo WHERE …) 但我无法弄清楚如何在foo为每行创build一个关联的行的副本,并将bar的id插入到新的foo行中。 […]

用PostgreSQL快速find类似的string

我需要在表格中创build类似string的排名。 我有下面的表格 create table names ( name character varying(255) ); 目前,我使用pg_trgm模块,它提供了similarityfunction,但是我有一个效率问题。 我创build了一个像Postgres手册所示的索引: CREATE INDEX trgm_idx ON names USING gist (name gist_trgm_ops); 并执行以下查询: select (similarity(n1.name, n2.name)) as sim, n1.name, n2.name from names n1, names n2 where n1.name != n2.name and similarity(n1.name, n2.name) > .8 order by sim desc; 查询起作用了,但是当你有数百个名字的时候真的很慢。 此外,也许我忘了一些SQL,但我不明白为什么我不能使用条件and sim > .8没有得到“列SIM卡不存在”的错误。 我想任何提示使查询更快。

SQL SELECT speed int vs varchar

我正在创build一张桌子,这让我感到惊讶。 如果我存储,说汽车有制造(fx宝马,奥迪等),如果我作为一个int或varchar存储的make会对查询速度有所不同。 那么 SELECT * FROM table WHERE make = 5 AND …; 比…更快/更慢 SELECT * FROM table WHERE make = 'audi' AND …; 或者速度会差不多呢?

如何更新表中的一行或插入它,如果它不存在?

我有下面的表格: CREATE TABLE cache ( key text PRIMARY KEY, generation int ); 我想递增其中一个计数器,或者如果相应的行不存在,则将其设置为零。 有没有办法做到这一点没有并发问题在标准的SQL? 操作有时是交易的一部分,有时是分开的。 如果可能,SQL必须在SQLite,PostgreSQL和MySQL上未修改。 search产生了一些想法,这些想法可能会遇到并发问题,或者特定于数据库: 尝试INSERT一个新行,并UPDATE是否有错误。 不幸的是, INSERT上的错误会中止当前事务。 UPDATE该行,如果没有行被修改,则INSERT一个新行。 MySQL有一个ON DUPLICATE KEY UPDATE子句。 编辑:感谢所有伟大的答复。 看起来保罗是对的,而且没有一种便携式的方法可以做到这一点。 这对我来说是相当惊人的,因为这听起来像是一个非常基本的操作。

如何非交互式地指定psql的密码?

我正在尝试使用shell脚本自动化数据库创build过程,还有一件事是通过将密码传递给psql来实现的。 以下是shell脚本的一些代码: psql -U $DB_USER -h localhost -c"$DB_RECREATE_SQL" 如何以非交互方式将密码传递给psql? 谢谢!

使用电子邮件地址作为主键?

与自动递增数字相比,电子邮件地址是不是主要的候选人? 我们的networking应用程序需要电子邮件地址在系统中是唯一的。 所以,我想使用电子邮件地址作为主键。 但是我的同事build议string比较比整数比较慢。 是不是使用电子邮件作为主键的正当理由? 我们正在使用PostgreSQL 。