gpt4 book ai didi

postgresql - 查询之间的列数或其类型不同

转载 作者:行者123 更新时间:2023-11-29 12:04:48 26 4
gpt4 key购买 nike

在 Debian Jessie 64 上使用 PostgreSQL 9.4.3。

问题.sql :

\set client_min_messages = debug

BEGIN;

SELECT * from no_plan();

SELECT Dugong.Users_Add('Sarit','thisispassword','programmer');
SELECT is(Dugong.Users_isExist('Sarit'),'t', 'Test Question_isExist() should return true' );
PREPARE A AS SELECT Username, Password, Privilege FROM Dugong.Users;

SELECT results_eq('A',$$VALUES ('sarit','thisispassword','programmer') $$,'Test wtf');
SELECT results_eq('A',$$VALUES ('Sarit','thisispassword','programmer') $$,'Test wtf');

SELECT * FROM finish();
ROLLBACK;

输出:

postgres@jaikra:/home/sarit/4alls/anemonesfish/pgtap$ pg_prove -v -d skorplusdb question.sql
question.sql ..
Sarit
ok 1 - Test Question_isExist() should return true
not ok 2 - Test wtf
# Failed test 2: "Test wtf"
# Number of columns or their types differ between the queries:
# have: (Sarit,thisispassword,programmer)
# want: (sarit,thisispassword,programmer)
not ok 3 - Test wtf
# Failed test 3: "Test wtf"
# Number of columns or their types differ between the queries
1..3
# Looks like you failed 2 tests of 3
Failed 2/3 subtests

Test Summary Report
-------------------
question.sql (Wstat: 0 Tests: 3 Failed: 2)
Failed tests: 2-3
Files=1, Tests=3, 0 wallclock secs ( 0.02 usr 0.00 sys + 0.03 cusr 0.00 csys = 0.05 CPU)
Result: FAIL

表:

CREATE TABLE Dugong.Users
( Username varchar(255),
Password varchar(255) NOT NULL,
Privilege varchar(255),
FirstName varchar(255),
MiddleName varchar(255),
LastName varchar(255),
StreetAddr varchar(255),
Subdistrict varchar(255),
District varchar(255),
Province varchar(255),
Country varchar(255),
Zipcode varchar(255),
Email varchar(255),
PhoneCountryCode varchar(10),
PhoneAreaCode varchar(255),
PhoneNum varchar(255),
FaxCountryCode varchar(255),
FaxAreaCode varchar(255),
FaxNum varchar(255),
LastModified timestamp with time zone default current_timestamp,
PRIMARY KEY(UserName)
);

更新

目标:测试我的 Users_Add 函数。它是否包含我给出的所有值。
预期:表Users有1条记录,有3个值。
我的尝试:
第二次错误。它显示了 3 列。这是一个很好的回应。因为我故意弄错了。所以在不久的将来我会让它成为一个正确的。
但是,第三个错误很奇怪。我将第二个大小写复制并更改为我想要的,让它在“S”上大写。然后准备好的查询有 3 列,我检查 3 个值。
我有另一个重载函数,它插入所有 20 列。现在我只想要 3 个。出现错误后我返回文档。

引用文档错误,它说查询和值的列数不同。但这不是我的情况。

问题:我的查询有 3 列,我让 pgtap 只检查 3 列,但第三种情况提出我让它检查记录的不相等列大小。

有关我的安装的任何信息请询问。我会尽快提供给您。

最佳答案

可能列数不是问题,而是它们的类型。试试这个:

SELECT results_eq('A',
$$VALUES (
'sarit'::varchar(255),
'thisispassword'::varchar(255),
'programmer'::varchar(255)) $$,
'Test wtf');
SELECT results_eq('A',
$$VALUES (
'Sarit'::varchar(255),
'thisispassword'::varchar(255),
'programmer'::varchar(255)) $$,
'Test wtf');

问题源于字符串(如'sarit')的默认类型是文本。通常,与 text 相比,使用 varchar(n) 是相当不方便的。

可在此处找到有关此主题的更多信息:Any downsides of using data type "text" for storing strings?PostgreSQL: Difference between text and varchar (character varying) .

关于postgresql - 查询之间的列数或其类型不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31500178/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com