小编MAK*_*MAK的帖子

使用PostgreSQL 9.3的动态数据透视查询

我有一个名为的表Product

create table product (
    ProductNumber varchar(10),
    ProductName varchar(10),
    SalesQuantity int,
    Salescountry varchar(10)
);  
Run Code Online (Sandbox Code Playgroud)

样本值:

insert into product values
  ('P1', 'PenDrive', 50,  'US')
, ('P2', 'Mouse',    100, 'UK')
, ('P3', 'KeyBoard', 250, 'US')
, ('P1', 'PenDrive', 300, 'US')
, ('P2', 'Mouse',    450, 'UK')
, ('P5', 'Dvd',      50,  'UAE');   
Run Code Online (Sandbox Code Playgroud)

我想Salescountry's动态生成名称并显示该SalesQuantity国家/地区的销售总额。

预期结果:

ProductName US    UK    UAE
----------------------------
PenDrive    350   0     0
Mouse       0     550   0
KeyBoard    250   0     0
Dvd         0     0     50
Run Code Online (Sandbox Code Playgroud)

我使用SQL Server 2008 …

postgresql pivot crosstab postgresql-9.3

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

PostgreSQL 9.3:IF NOT NOT EXISTS

我想检查数据库中是否存在该表.

IF NOT EXISTS (SELECT * from INFORMATION_SCHEMA.Tables WHERE Table_name = 'test') THEN

    RAISE INFO 'Not exists';

else

    RAISE INFO 'Exists';

end if;
Run Code Online (Sandbox Code Playgroud)

得到错误:

ERROR:  syntax error at or near "IF"
Run Code Online (Sandbox Code Playgroud)

postgresql postgresql-9.3

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

PostgreSQL 9.3:函数不是唯一错误

我用11个参数创建了以下函数,如下所示:

函数调用

SELECT * FROM function_TableDetails
(
    NULL::Type_Table,
    '2671ffdb-28a4-4ce4-a226-e5a21d66509e',
    'D09636DC-0185-4FFC-AEDD-63895B445CD8',
    'Xyz',
    'Cola',
    '20028243-52c2-4d23-a6fe-c3694aab84a2',
    '01-01-2000',
    '01-01-2016',
    '00:00:01',
    '23:59:59',
    'Al'
);
Run Code Online (Sandbox Code Playgroud)

对接以下错误:

ERROR:  function function_TableDetails(Type_Table, unknown, unknown, unknown, unknown, unknown, unknown, unknown, unknown, unknown, unknown) is not unique
LINE 1: SELECT * FROM function_TableDetails
              ^
HINT:  Could not choose a best candidate function. You might need to add explicit type casts.
Run Code Online (Sandbox Code Playgroud)

我对此有两个问题:

第一:如何解决以上错误?(因为它甚至不在函数内,并且没有显示错误的确切位置)

第二:如何调试功能?(特别是必须处理此类错误)

postgresql postgresql-9.3

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

PostgreSQL 9.3:向/从时间戳添加/删除 QUARTER

我想添加QUARTERTIMESTAMPPostgreSQL中9.3版本。

我的尝试:

添加:

SELECT TIMESTAMP '2016-01-01' + INTERVAL '01 QUARTER';
Run Code Online (Sandbox Code Playgroud)

对于删除:

SELECT TIMESTAMP '2016-01-01' - INTERVAL '01 QUARTER';
Run Code Online (Sandbox Code Playgroud)
********** Error **********  
ERROR: invalid input syntax for type interval: "01 QUARTER"  
SQL state: 22007  
Character: 42
Run Code Online (Sandbox Code Playgroud)

postgresql timestamp intervals postgresql-9.3

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

PostgreSQL 9.5:隐藏 dblink 连接的密码

我想要你位于另一个数据库中的表。

我正在为此使用dblink

程序

第 1 步:创建扩展。

CREATE EXTENSION dblink;
Run Code Online (Sandbox Code Playgroud)

第二步:制作dblink连接字符串。

select dblink_connect('con','host=127.0.0.1 dbname=makdb user=postgres password=postgres');
Run Code Online (Sandbox Code Playgroud)

第 3 步:

select * from dblink('con','select cola,colb from tbl_test') as tbl(cola int,colb varchar(10));
Run Code Online (Sandbox Code Playgroud)

我的问题:如何在步骤 2 中隐藏密码?

通过搜索,我知道我需要创建.pgpass文件。但是在如何创建以及在哪个步骤中我需要使用该文件名时陷入了困境。

postgresql dblink

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

PostgreSQL:使用语言 plpgsql 从函数返回 JSON

我有下表,其中包含两个字段:

create table tbl_jtest
(
cola int,
colb varchar(10)
);
Run Code Online (Sandbox Code Playgroud)

插入一些记录:

insert into tbl_jtest values(1,'a');
insert into tbl_jtest values(2,'b');
insert into tbl_jtest values(3,'c');
insert into tbl_jtest values(4,'d');
Run Code Online (Sandbox Code Playgroud)

功能

CREATE OR REPLACE FUNCTION ufn_jtest1(pcola int) 
RETURNS json AS
$$
BEGIN
IF pcola = 1 
THEN
    RETURN QUERY SELECT to_json(a.cola) FROM tbl_jtest a;
ELSE
    RETURN QUERY  SELECT to_json(a.colb) FROM tbl_jtest a;
END IF;
END;
$$ LANGUAGE plpgsql;
Run Code Online (Sandbox Code Playgroud)

错误详情

错误:不能在非 SETOF 函数中使用 RETURN QUERY 第 7 行:RETURN QUERY SELECT to_json(a.cola) FROM …

postgresql plpgsql

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

PostgreSQL中的集群和非集群索引

我正在使用PostgreSQL 9.3版本来创建数据库.

我有一些列列表的下表测试.

create table test
(
  cola varchar(10),
  colb varchar(10),
  colc varchar(10),
  cold varchar(10)
);
Run Code Online (Sandbox Code Playgroud)

现在我想在一些列上创建索引.

例如:

我想创建一个列聚集索引colacolb.

我想创建一个列非聚集索引colccold.

正如我提到这个这个,我才知道,有在PostgreSQL里没有聚集和非聚集索引.

我的问题:我可以使用什么类型的索引而不是PostgreSQL中的聚簇索引和非聚簇索引,它与集群索引和非聚簇索引的作用相同?

postgresql indexing postgresql-9.3

4
推荐指数
1
解决办法
9466
查看次数

错误:使用PostgreSQL 9.3在dblink中的函数需要列定义列表

我有以下功能:

我通过使用加入其他数据库表来更新一个数据库表dblink().

我安装了:

create extension dblink;
Run Code Online (Sandbox Code Playgroud)

更多细节如下图所示:

CREATE OR REPLACE FUNCTION Fun_test
(
    Table_Name varchar
) 
RETURNS void AS

$BODY$

DECLARE
    dynamic_statement varchar;

BEGIN
    perform dblink_connect('port=5234 dbname=testdb user=postgres password=****');


    dynamic_statement := 'With CTE AS 
    ( 
        Select HNumber,JoiningDate,Name,Address
        From '|| Table_Name ||'c 
    )
    , Test_A 
    AS 
    ( 
    Select Row_Number() over ( Partition by PNumber order by Date1 Desc,Date2 Desc) AS roNum,
    Name,PNumber,Date1,Address
    From dblink(
            ''Select distinct PNumber,
            (
                case when fname is null then '' else fname end || …
Run Code Online (Sandbox Code Playgroud)

postgresql dblink postgresql-9.3

4
推荐指数
1
解决办法
5075
查看次数

PostgreSQL 9.3:isnumeric()在某种情况下

我需要从函数检查给定的文本是否为数字。

创建功能isnumeric()

CREATE OR REPLACE FUNCTION isnumeric(text) RETURNS BOOLEAN AS $$
DECLARE x NUMERIC;
BEGIN
    x = $1::NUMERIC;
    RETURN TRUE;
EXCEPTION WHEN others THEN
    RETURN FALSE;
END;
$$ LANGUAGE plpgsql IMMUTABLE;
Run Code Online (Sandbox Code Playgroud)

我从中调用该isnumeric()函数的函数:

create or replace function tm(var text)
returns varchar as
$$
begin
    if (select isnumeric(var))=t::BOOLEAN then
        raise info 'Is numeric value';
    else
        raise info 'Not numeric';
    end if;
end;
$$
language plpgsql;
Run Code Online (Sandbox Code Playgroud)

呼叫functon:

select tm('1');
Run Code Online (Sandbox Code Playgroud)

出现错误:

错误详细信息如下:

ERROR:  column "t" does not exist
LINE 1: …
Run Code Online (Sandbox Code Playgroud)

postgresql plpgsql isnumeric postgresql-9.3

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

SQL Server 2008 R2:'CREATE/ALTER VIEW'不允许将数据库名称指定为对象名称的前缀

我有2个数据库DB1DB2.

我有一个被称为View1存储在数据库中的视图DB2.现在我想ALTER VIEWDB1数据库.

我的尝试:

ALTER VIEW DB2..View1 
AS 
   SELECT * FROM DB2..Test;
Run Code Online (Sandbox Code Playgroud)

但我收到一个错误:

'CREATE/ALTER VIEW'不允许将数据库名称指定为对象名称的前缀

sql-server sql-server-2008-r2

4
推荐指数
1
解决办法
5979
查看次数