小编Erw*_*ter的帖子

如何在Postgres中检查数组是否为空

我有一个Postgres功能:

CREATE OR REPLACE FUNCTION get_stats(
    _start_date timestamp with time zone,
    _stop_date timestamp with time zone,
    id_clients integer[],
    OUT date timestamp with time zone,
    OUT profit,
    OUT cost
)
RETURNS SETOF record
LANGUAGE plpgsql
AS $$
DECLARE
    query varchar := '';
BEGIN
... -- lot of code
IF id_clients IS NOT NULL THEN
    query := query||' AND id = ANY ('||quote_nullable(id_clients)||')';
END IF;
... -- other code
END;
$$;
Run Code Online (Sandbox Code Playgroud)

所以如果我运行这样的查询:

SELECT * FROM get_stats('2014-07-01 00:00:00Etc/GMT-3'
                      , '2014-08-06 23:59:59Etc/GMT-3', '{}');
Run Code Online (Sandbox Code Playgroud)

生成的查询具有以下条件: …

sql arrays postgresql null stored-procedures

31
推荐指数
2
解决办法
4万
查看次数

我可以让plpgsql函数返回一个整数而不使用变量吗?

像这样的东西:

CREATE OR REPLACE FUNCTION get(param_id integer)
  RETURNS integer AS
$BODY$
BEGIN
SELECT col1 FROM TABLE WHERE id = param_id;
END;
$BODY$
  LANGUAGE plpgsql;
Run Code Online (Sandbox Code Playgroud)

我想避免DECLARE这样做.

postgresql variables parameters function plpgsql

30
推荐指数
1
解决办法
3万
查看次数

Rails迁移:尝试将列的类型从字符串更改为整数

我在rails应用程序中使用rails generate migrations命令创建了一个表.这是迁移文件:

class CreateListings < ActiveRecord::Migration
  def change
    create_table :listings do |t|
      t.string :name
      t.string :telephone
      t.string :latitude
      t.string :longitude

      t.timestamps
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

然后我想将纬度和经度存储为整数,所以我试图运行:

rails generate migration changeColumnType
Run Code Online (Sandbox Code Playgroud)

并且该文件的内容是:

class ChangeColumnType < ActiveRecord::Migration
  def up
    #change latitude columntype from string to integertype
    change_column :listings, :latitude, :integer
    change_column :listings, :longitude, :integer
    #change longitude columntype from string to integer type
  end

  def down  
  end
end
Run Code Online (Sandbox Code Playgroud)

我期待列类型改变但是rake被中止并且出现以下错误消息.我想知道为什么这不通过?我在我的应用程序中使用postgresql.

rake db:migrate
==  ChangeColumnType: migrating ===============================================
-- change_column(:listings, :latitude, :integer)
rake aborted!
An error …
Run Code Online (Sandbox Code Playgroud)

ruby postgresql casting ruby-on-rails rails-migrations

30
推荐指数
4
解决办法
3万
查看次数

now()默认值都显示相同的时间戳

我用列创建了表(类型:timestamp with timezone)并将其默认值设置为now()(current_timestamp()).

我在单个函数中的单独语句中运行一系列插入,我注意到所有时间戳都等于(ms),是否为整个函数调用或事务缓存和共享了函数值?

postgresql timestamp transactions postgresql-9.1

30
推荐指数
2
解决办法
3万
查看次数

PostgreSQL下一个序列的值?

我在我的Codeigniter网站上使用PostgreSQL.我正在使用杂货店crud来添加,编辑和删除操作.在进行编辑或添加时,我想根据内容的ID动态重命名上传的文件.我可以使用杂货crud的callback_after_upload功能来做到这一点.

在添加新内容时,我想要内容的下一个ID.我尝试使用nextval()函数,但序列随之增加.如何在不使用nextval()函数的情况下获取序列的最后一个值?

或者有一种简单的方法可以做到这一点吗?

postgresql codeigniter sequence nextval postgresql-9.1

30
推荐指数
5
解决办法
9万
查看次数

如果没有找到记录,则返回零

我在存储过程中有一个查询,它在表中汇总了一些值:

SELECT SUM(columnA) FROM my_table WHERE columnB = 1 INTO res;
Run Code Online (Sandbox Code Playgroud)

在此选择之后,我res用另一个查询检索的整数减去值并返回结果.如果WHERE条款得到验证,一切正常.但如果不是,我的所有函数返回都是一个空列(可能因为我试图减去一个空值的整数).

如果WHERE不满足该条款,如何使我的查询返回零?

sql postgresql null coalesce plpgsql

30
推荐指数
1
解决办法
10万
查看次数

Postgres错误:用作表达式的子查询返回多行

我有两个独立的数据库.我试图将一个数据库中的列更新为另一个数据库中的列的值:

UPDATE customer
SET customer_id=
   (SELECT t1 FROM dblink('port=5432, dbname=SERVER1 user=postgres password=309245',
   'SELECT store_key FROM store') AS (t1 integer));
Run Code Online (Sandbox Code Playgroud)

这是我收到的错误:

ERROR:  more than one row returned by a subquery used as an expression
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

sql database postgresql dblink subquery

30
推荐指数
3
解决办法
9万
查看次数

自动增量表列

使用Postgres,我试图AUTO_INCREMENT在SQL中自动编号我的主键.但是,它给了我一个错误.

CREATE TABLE Staff   (
  ID        INTEGER NOT NULL AUTO_INCREMENT,
  Name      VARCHAR(40) NOT NULL,
  PRIMARY KEY (ID)
);
Run Code Online (Sandbox Code Playgroud)

错误:

********** Error **********
ERROR: syntax error at or near "AUTO_INCREMENT"
SQL state: 42601
Character: 63
Run Code Online (Sandbox Code Playgroud)

知道为什么吗?

sql postgresql types auto-increment database-table

29
推荐指数
1
解决办法
5万
查看次数

Postgis几何边界上的两个最近点

我有一个geofences存储geometry多边形的表.

我还有一个A在几何体内部的点.我要做的是找到A位于多边形几何体表面上的点的两个最近点.

PostGIS中的功能:

CREATE OR REPLACE FUNCTION accuracyCheck(Polygon geometry
                                        ,decimal lat
                                        ,decimal lon)
  RETURNS VARCHAR AS
$BODY$

DECLARE height DECIMAL;
DECLARE accuracy VARCHAR(250);

BEGIN 

CREATE TEMPORARY TABLE closePointStorage AS
SELECT ST_AsText(ST_ClosestPoint(geometry
                                ,ST_GeomFromText('POINT(lat lon)',0)
                                )
                ) AS closestPoint
FROM  (
   SELECT ST_GeomFromText(geometry) as geometry
   FROM gfe_geofences
   WHERE is_active=true
   ) As tempName;

CREATE TEMPORARY TABLE areaStorage ON COMMIT DROP AS
SELECT ST_Area(ST_GeomFromText('Polygon((23.0808622876029 96.1304006624291
                                        ,28.0808622876029 99.1304006624291
                                        ,100              200
                                        ,23.0808622876029 96.1304006624291
                                        ))'
                              ,0)
              ) AS area; …
Run Code Online (Sandbox Code Playgroud)

postgresql postgis plpgsql

29
推荐指数
1
解决办法
2002
查看次数

currval尚未定义此会话,如何获得多会话序列?

我的目标是在表中插入新行时自动插入主键字段.

如何在PostgreSQL中获得从一个会话到另一个会话的序列?

 doubleemploi@hanbei:/home/yves$ psql -d test
 Mot de passe : 
 psql (8.4.13)
 Saisissez « help » pour l''aide.

 test=> create sequence test001 start 10;
 CREATE SEQUENCE
 test=> select currval('test001');
 ERREUR:  la valeur courante (currval) de la séquence « test00 » n''est pas encore définie dans cette session
 --- current value not yet defined this session (???)
 test=> select setval('test001', 10);
 setval 
 --------
      10
 (1 ligne)

 test=> select currval('test00');
  currval 
 ---------
       10
 (1 ligne)

 test=> \q
 test@hanbei:/home/yves$ psql -d test
 Mot …
Run Code Online (Sandbox Code Playgroud)

postgresql database-design auto-increment postgresql-8.4

29
推荐指数
3
解决办法
5万
查看次数