#postgresql #go
#postgresql #Вперед
Вопрос:
Я продолжаю получать эту ошибку: вставка или обновление таблицы «примечание» нарушает ограничение внешнего ключа «note_username_fkey»
У меня есть две таблицы: User и Note. Вот инструкции create table:
func setup() *sql.DB {
db = connectDatabase()
//Create queries
userTable := `CREATE TABLE IF NOT EXISTS "User"(
UserID SERIAL unique,
UserName VARCHAR(50) PRIMARY KEY,
FirstName VARCHAR(50),
LastName VARCHAR(50),
Password VARCHAR(40)
);`
noteTable := `CREATE TABLE IF NOT EXISTS Note(
NoteID SERIAL PRIMARY KEY,
UserID INT,
UserName VARCHAR(50),
Title VARCHAR(30),
Contents VARCHAR(1000),
DateCreated DATE,
DateUpdated DATE,
FOREIGN KEY (UserName) REFERENCES "User"(UserName)
);`
}
func createNoteInsertSQL(userID string, userName string, title string, content string, selectSetting string) bool {
var newNote Note
var err error
newNote.UserID, err = strconv.Atoi(userID)
if err != nil {
log.Fatal(err)
}
newNote.UserName = userName
newNote.Title = title
newNote.Contents = content
date := time.Now()
newNote.DateCreated = date
newNote.DateUpdated = date
query := `INSERT INTO Note (UserID, UserName, Title, Contents, DateCreated, DateUpdated) VALUES ($1, $2, $3, $4, $5, $6) RETURNING NoteID;`
stmt, err := db.Prepare(query)
if err != nil {
log.Fatal(err)
return false
}
var noteID int
err = stmt.QueryRow(newNote.UserID, newNote.UserName, newNote.Title, newNote.Contents, newNote.DateCreated, newNote.DateUpdated).Scan(amp;noteID)
if err != nil {
log.Fatal(err)
return false
}
}
Может кто-нибудь, пожалуйста, скажите мне, где не так?
Спасибо.
Комментарии:
1. Вам нужно сначала создать пользователя для ограничений внешнего ключа или отправить null в username столбца таблицы заметок.
2. Вы читали о том, что такое внешние ключи в реляционных базах данных?
Ответ №1:
Проверьте, доступно ли значение столбца «Username», которое вы пытаетесь вставить в таблицу заметок, в таблице «User». Поскольку запрос insert пытается вставить значение, недоступное в таблице «User».