Syntax error at or near create
Пожалуйста, почему этот код не работает?
nodelogin-# CREATE TABLE user
nodelogin-# (id BIGSERIAL PRIMARY KEY NOT NULL,
nodelogin(# name VARCHAR(200) NOT NULL,
nodelogin(# email VARCHAR(200) NOT NULL,
nodelogin(# password VARCHAR(200) NOT NULL,
nodelogin(# UNIQUE (email));
ERROR: syntax error at or near “CREATE”
LINE 2: CREATE TABLE user
Ответ
user это зарезервированное ключевое слово в PostgreSQL. В принципе, PostgreSQL не нравится название. Если вы попробуете другое имя (user2, user_, comp_user), оно должно работать
syntax error at or near create when creating a function
Итак, я впервые создаю функцию в PostgreSQL, и у меня возникла проблема с синтаксисом
CREATE OR REPLACE FUNCTION uni() RETURNS INTEGER AS $$
DECLARE
mviews RECORD;
BEGIN
FOR mviews IN SELECT id,universite_adi FROM proaca.a LOOP
INSERT INTO proaca.universite (id,ad,ulke_id)
VALUES (mviews.id,mviews.universite_adi,1)
END LOOP;
RETURN 1;
END;
$$ LANGUAGE plpgsql;
ERROR: syntax error at or near “create”
Line 2: $BODY$CREATE OR REPLACE FUNCTION uni() RETURNS INTEGER AS $$
Ответ
Вам не нужен этот цикл. Просто обычный sql
create or replace function uni()
returns integer as $$
insert into proaca.universite (id, ad, ulke_id)
select id, universite_adi, 1
from proaca.a
returning 1
;
$$ language sql;
Error when creating a stored procedure in postgreSQL-10
Я не смог заставить свою первую хранимую процедуру работать, поэтому я скопировал этот пример из руководства:
CREATE PROCEDURE insert_data(a integer, b integer)
LANGUAGE SQL
AS $$
INSERT INTO tbl VALUES (a);
INSERT INTO tbl VALUES (b);
$$;
CALL insert_data(1, 2);
и я получаю следующее сообщение об ошибке:
ERROR: syntax error at or near “PROCEDURE”
LINE 1: CREATE PROCEDURE insert_data(a integer, b integer)
^
SQL state: 42601
Character: 8
Что я делаю не так?
Я запускаю базу данных на localhost, работая от имени пользователя admin. Я установил его сам. Процесс установки завершен без ошибок, и я могу создавать таблицы, функции, триггеры и т. Д.
Ответ
Как упоминалось в комментариях, в PostgreSQL-10 нет хранимых процедур. То же самое относится и к более ранним версиям.
Альтернативы обходного пути:
- Обновление до версии 11 или более поздней
- Используйте функцию
Как в PostegreSQL создать триггер в запросе без ошибок? вот таких ниже в описании, гуглил не нашёл ничего.
Ошибка SQL:
ERROR: syntax error at or near “CREATE”
LINE 18: CREATE trigger wp_users_uuid_trigger
^
В операторе:
ALTER TABLE wp_users
ADD COLUMN uuid CHAR(36) UNIQUE DEFAULT NULL,
ADD COLUMN accessToken CHAR(32) DEFAULT NULL,
ADD COLUMN serverID VARCHAR(41) DEFAULT NULL;
CREATE EXTENSION IF NOT EXISTS “uuid-ossp”;
CREATE OR REPLACE FUNCTION public.wp_users_uuid_trigger_func()
RETURNS trigger
LANGUAGE plpgsql
AS $function$
BEGIN
new.uuid = (SELECT uuid_generate_v4());
return new;
END;
$function$
CREATE trigger wp_users_uuid_trigger
BEFORE INSERT ON wp_users
FOR EACH ROW
EXECUTE PROCEDURE wp_users_uuid_trigger_func();
UPDATE wp_users SET uuid=(SELECT uuid_generate_v4()) WHERE uuid IS NULL;
Ответ
Точки с запятой нет после $function$ и перед CREATE trigger…