例如,在MS-SQL中,您可以打开查询窗口并运行以下命令:
DECLARE @List AS VARCHAR(8)
SELECT @List = 'foobar'
SELECT *
FROM dbo.PubLists
WHERE Name = @List
Run Code Online (Sandbox Code Playgroud)
如何在PostgreSQL中完成?可以吗?
我在使用?占位符的脚本中有一个详细的查询.我想直接从psql命令行(脚本外部)测试这个相同的查询.我想避免进入并用?实际值替换所有值,而是想在查询后传递参数.
例:
SELECT *
FROM foobar
WHERE foo = ?
AND bar = ?
OR baz = ? ;
Run Code Online (Sandbox Code Playgroud)
寻找类似的东西:
%> {select * from foobar where foo=? and bar=? or baz=? , 'foo','bar','baz' };
Run Code Online (Sandbox Code Playgroud) 有一个几乎相同,但并没有真正回答的问题在这里.
我正在将应用程序从MS SQL Server迁移到PostgreSQL.在代码中的许多地方我使用局部变量,所以我想进行需要较少工作的更改,所以请告诉我哪个是翻译以下代码的最佳方法?
-- MS SQL Syntax: declare 2 variables, assign value and return the sum of the two
declare @One integer = 1
declare @Two integer = 2
select @One + @Two as SUM
Run Code Online (Sandbox Code Playgroud)
这会返回:
SUM
-----------
3
(1 row(s) affected)
Run Code Online (Sandbox Code Playgroud)
如果它包含可以简化翻译的重要文件,我会使用Postgresql 8.4甚至9.0.
我从外部服务器导出了一个postgresql数据库,并试图将其导入我的本地服务器,但是出现了这个错误:
unrecognized configuration parameter "idle_in_transaction_session_timeout"
Run Code Online (Sandbox Code Playgroud)
这种错误是否意味着两台服务器使用不同版本的postgresql?我调查了一下,外部服务器正在运行:
version
PostgreSQL 9.5.4 on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 4.8.2-19ubuntu1) 4.8.2, 64-bit
Run Code Online (Sandbox Code Playgroud)
我的服务器正在运行:
version
PostgreSQL 9.5.5 on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 5.4.0-6ubuntu1~16.04.2) 5.4.0 20160609, 64-bit
Run Code Online (Sandbox Code Playgroud)
几乎是一回事.是否有一个站点,您可以在其中查看每个版本的所有有效配置参数?有没有办法同步这样的两个数据库,所以这样的不兼容性会自动修补?
有没有办法在PostgreSQL查询中定义命名常量?例如:
MY_ID = 5;
SELECT * FROM users WHERE id = MY_ID;
Run Code Online (Sandbox Code Playgroud) 我只是想知道如何在 PostreSQL 存储过程中将整数列表存储为变量。
例如,我有这样的陈述:
select A from B where C IN (1,2,3);
select A from B where C IN (1,2);
Run Code Online (Sandbox Code Playgroud)
我想声明一个变量来存储(1,2,3)or (1,2)。
所以我最终会得到这样的声明:
select A from B where C in numberList;
Run Code Online (Sandbox Code Playgroud)
(numberList 的值为 (1,2,3))
我不知道我应该使用哪种数据类型,我在网上查了一下,在 psql 中找不到列表类型。它的语法是什么?
我有以下堆栈
我编写了一堆端到端测试来测试我所有的网络服务。问题是其中一些是时间相关的(如“给我最后 X 秒的修改记录”)。
sinon非常擅长模拟 Node 中所有与时间/日期相关的内容,但是modified我的 Postgresql 表中有一个字段填充了触发器:
CREATE FUNCTION update_modified_column()
RETURNS TRIGGER AS $$
BEGIN
NEW.modified = now();
RETURN NEW;
END;
$$ LANGUAGE 'plpgsql';
Run Code Online (Sandbox Code Playgroud)
问题当然是sinon无法覆盖该now()功能。
关于如何解决这个问题的任何想法?问题不是在测试开始时设置特定日期,而是提前时间比实时快(在我的一个测试中,我想更改数据库中的某些内容,将“当前时间”提前一天,更改数据库中还有一些东西,并进行网络服务调用以查看结果)。
我自己可以找出一些解决方案,但它们都涉及更改应用程序代码并使其不那么优雅。我认为您的应用程序代码不应受到您想要测试它的影响。
我有以下MySQL脚本,我想在PostgreSQL中实现.
SET @statement = search_address_query;
PREPARE dynquery FROM @statement;
EXECUTE dynquery;
DEALLOCATE PREPARE dynquery;
Run Code Online (Sandbox Code Playgroud)
如何使用PostgreSQL定义用户定义的变量"@statement".
我正在尝试在postgres上为4个表执行连接查询.
表名:
scenarios_scenariopayments_invoicepayments_paymentpayments_action(所有这些奇怪的名字都是由django生成的 - )))
关系:
scenarios_scenario[有很多] payments_actionspayments_action [有一个] payments_invoice payments_action [有一个] payments_payment 下面是一个工作查询,
SELECT payments_invoice.*,
(payments_payment.to_be_paid - payments_payment.paid) as remaining, \
payments_action.identificator
FROM payments_invoice
JOIN payments_payment
ON payments_invoice.action_id = payments_payment.action_id
AND payments_payment.full_payment=2
JOIN payments_action
ON payments_invoice.action_id = payments_action.id
AND payments_action.identificator = %s
Run Code Online (Sandbox Code Playgroud)
我只是想从另一个表中检索一个相关的字段,并写了另一个查询
SELECT
scenarios_scenario.title, payments_invoice.*, \
(payments_payment.to_be_paid - payments_payment.paid) as remaining, \
payments_action.identificator, payments_action.scenario_id
FROM payments_invoice
JOIN scenarios_scenario
ON scenarios_scenario.id = payments_action.scenario_id
JOIN payments_payment
ON payments_invoice.action_id = payments_payment.action_id
AND payments_payment.full_payment=2
JOIN …Run Code Online (Sandbox Code Playgroud) 我试图在 postgresql sql 脚本中声明默认值 0 的整数变量:
DECLARE user_id integer;
Run Code Online (Sandbox Code Playgroud)
但它返回异常:
错误:“整数”处或附近的语法错误
我不确定如何声明一个变量,然后在 while 循环内使用该变量。
我尝试在这样的代码中声明一个变量,但它不起作用.你能告诉我这是什么问题吗?
ERROR: syntax error at or near "VARCHAR"
LINE 2: p_country VARCHAR;
DECLARE
p_country VARCHAR;
p_country : = '';
SELECT p_country;
Run Code Online (Sandbox Code Playgroud) 我喜欢在where子句中使用"IF"条件.从各种线程,我理解其中一个选项是CASE表达式,但我无法弄清楚.
示例代码:
select * from sampleTable
where
If @taxtype = 'P' then
(taxtype = 'P' or (taxtype = 'E' and code in ('MER','SER')))
Else
(taxtype = 'E' and code not in ('MER','SER'))
End If
Run Code Online (Sandbox Code Playgroud)
任何帮助是极大的赞赏.
谢谢!
所以这个查询很简单:
SELECT * FROM [schema_name].[table_name]
WHERE [schema_name].[table_name].[field_name] = 'search_value';
Run Code Online (Sandbox Code Playgroud)
在Transact-SQL中,可以为“ search_value”创建一个变量:
DECLARE @find varchar(30) = 'search_value';
SELECT * FROM [schema_name].[table_name]
WHERE [schema_name].[table_name].[field_name] = @find;
Run Code Online (Sandbox Code Playgroud)
甚至重新使用变量:
SET @find = 'new_search_value';
Run Code Online (Sandbox Code Playgroud)
我现在已经尽一切努力在PostgreSQL中模仿它,但是我无法使其正常工作。
有什么建议么???
postgresql ×13
sql ×3
variables ×3
dynamic-sql ×1
migration ×1
mocha.js ×1
node.js ×1
parameters ×1
pgadmin ×1
psql ×1
sinon ×1
sql-server ×1