Краткий ответ: ваш метод foo()
возвращается немедленно, а вызов $ajax()
выполняется асинхронно после возврата функции . Проблема заключается в том, как и где сохранить результаты, полученные при вызове async, после его возврата.
В этом потоке было задано несколько решений. Возможно, самый простой способ - передать объект методу foo()
и сохранить результаты в члене этого объекта после завершения асинхронного вызова.
function foo(result) {
$.ajax({
url: '...',
success: function(response) {
result.response = response; // Store the async result
}
});
}
var result = { response: null }; // Object to hold the async result
foo(result); // Returns before the async completes
Обратите внимание, что вызов foo()
] все равно не вернут ничего полезного. Однако результат асинхронного вызова теперь будет сохранен в result.response
.
Попробуйте выполнить эту команду:
ALTER TABLE your_table ADD COLUMN key_column BIGSERIAL PRIMARY KEY;
Попробуйте использовать тот же DB-пользователь, что и , созданный в таблице.
Возможно, я немного опаздываю, чтобы ответить на этот вопрос, но я работаю над этим вопросом на своей работе :)
Я хотел написать столбец «a_code» = c1, c2, c3 , c4 ...
Сначала я открыл столбец с именем ref_id
и типом serial
. Затем я решил свою проблему с помощью этой команды:
update myschema.mytable set a_code=cast('c'||"ref_id" as text)
Создайте автоматически увеличивающий первичный ключ в postgresql, используя пользовательскую последовательность:
Шаг 1, создайте свою последовательность:
create sequence splog_adfarm_seq
start 1
increment 1
NO MAXVALUE
CACHE 1;
ALTER TABLE fact_stock_data_detail_seq
OWNER TO pgadmin;
Шаг 2, создайте таблицу
CREATE TABLE splog_adfarm
(
splog_key INT unique not null,
splog_value VARCHAR(100) not null
);
Шаг 3, вставьте в таблицу
insert into splog_adfarm values (
nextval('splog_adfarm_seq'),
'Is your family tree a directed acyclic graph?'
);
insert into splog_adfarm values (
nextval('splog_adfarm_seq'),
'Will the smart cookies catch the crumb? Find out now!'
);
Шаг 4, наблюдайте за строками
el@defiant ~ $ psql -U pgadmin -d kurz_prod -c "select * from splog_adfarm"
splog_key | splog_value
----------+--------------------------------------------------------------------
1 | Is your family tree a directed acyclic graph?
2 | Will the smart cookies catch the crumb? Find out now!
(3 rows)
В двух строках есть клавиши, начинающиеся с 1 и увеличиваются на 1, как определено последовательностью.
Bonus Elite ProTip:
Программисты ненавидят типизацию, а ввод nextval('splog_adfarm_seq')
раздражает. Вместо этого вы можете ввести DEFAULT
для этого параметра, например:
insert into splog_adfarm values (
DEFAULT,
'Sufficient intelligence to outwit a thimble.'
);
. Для того чтобы выше работала, вы должны определить значение по умолчанию для этого столбца ключа в таблице splog_adfarm. Что красивее.
Если вы хотите использовать числа в последовательности, определите новую последовательность с чем-то вроде
CREATE SEQUENCE public.your_sequence
INCREMENT 1
START 1
MINVALUE 1
;
, а затем измените таблицу, чтобы использовать последовательность для id:
ALTER TABLE ONLY table ALTER COLUMN id SET DEFAULT nextval('your_sequence'::regclass);
Если вы хотите сделать это в pgadmin, это намного проще. Кажется, что в postgressql добавляется автоматическое приращение к столбцу, сначала нам нужно создать последовательность автоматического увеличения и добавить ее в требуемый столбец. Мне это понравилось.
1) Во-первых, вам нужно убедиться, что для вашей таблицы есть первичный ключ. Также сохраните тип данных первичного ключа в bigint или smallint. (Я использовал bigint, не мог найти тип данных, называемый серийным, как упоминалось в других ответах в другом месте)
2) Затем добавьте последовательность, щелкнув правой кнопкой мыши по последовательности-> добавить новую последовательность. Если в таблице нет данных, оставьте последовательность как есть, не вносите никаких изменений. Просто сохраните его. Если существуют существующие данные, добавьте последнее или самое большее значение в столбце первичного ключа в значение Текущее значение на вкладке «Определения», как показано ниже.
3) Наконец, добавьте строку nextval('your_sequence_name'::regclass)
в значение по умолчанию в вашем первичном ключе, как показано ниже.
Убедитесь, что имя последовательности здесь правильно. Это все, и автоматический прирост должен работать.