Променливите в psql
са гадни. Ако искате да декларирате цяло число, трябва да въведете цялото число, след това да направите връщане на каретка, след което да завършите оператора с точка и запетая. Спазвайте:
Да кажем, че искам да декларирам целочислена променлива my_var
и да я вмъкна в таблица test
:
Примерна таблица test
:
thedatabase=# \d test;
Table "public.test"
Column | Type | Modifiers
--------+---------+---------------------------------------------------
id | integer | not null default nextval('test_id_seq'::regclass)
Indexes:
"test_pkey" PRIMARY KEY, btree (id)
Ясно е, че все още няма нищо в тази таблица:
thedatabase=# select * from test;
id
----
(0 rows)
Ние декларираме променлива. Забележете как точката и запетая е на следващия ред!
thedatabase=# \set my_var 999
thedatabase=# ;
Сега можем да вмъкнем. Трябва да използваме този странен ":''
" изглеждащ синтаксис:
thedatabase=# insert into test(id) values (:'my_var');
INSERT 0 1
Проработи!
thedatabase=# select * from test;
id
-----
999
(1 row)
Обяснение:
И така... какво се случва, ако нямаме точка и запетая на следващия ред? Променливата? Погледни:
Декларираме my_var
без новия ред.
thedatabase=# \set my_var 999;
Нека изберем my_var
.
thedatabase=# select :'my_var';
?column?
----------
999;
(1 row)
Какво по дяволите е това? Това не е цяло число, а низ 999;
!
thedatabase=# select 999;
?column?
----------
999
(1 row)
person
Alexander Kleinhans
schedule
10.11.2018