Настраиваем тест следующим образом:
postgresContainer, err := postgres.RunContainer(ctx,
testcontainers.WithImage("docker.io/postgres:16-alpine"),
postgres.WithDatabase(dbName),
postgres.WithUsername(dbUser),
postgres.WithPassword(dbPassword),
postgres.WithInitScripts(filepath.Join("..", "postgres_migrations", "v1_create_bands.sql"),
filepath.Join("..", "tests", "postgres_scripts", "bands_init.sql")),
testcontainers.WithWaitStrategy(
wait.ForLog("database system is ready to accept connections").
WithOccurrence(2).
WithStartupTimeout(5*time.Second)),
)
v1_create_bands.sql:
CREATE TABLE bands (
id INT PRIMARY KEY,
name VARCHAR(255)
);
полосы_init.sql:
INSERT INTO bands(id, name) VALUES
(1, 'Band1'),
(2, 'Band2');
Когда я запускаю тест, я получаю сообщение об ошибке relation "bands" does not exist at character 13 при попытке запуститьbands_init.sql.
Но если я скопирую оператор CREATE TABLE вbands_init.sql, я получу ошибку relation "bands" already exists!
Если я оставлю толькоbands_init.sql в качестве единственного скрипта с двумя операторами, тест пройдет правильно. Я не понимаю, что здесь происходит.





Я пропустил то, что ошибка во втором сценарии произошла при запуске v1_create_bands.sql. Таким образом, скрипты просто выполняются в алфавитном порядке, а не в порядке их передачи в функцию. Я переименовал файлbands_init.sql так, чтобы он был больше по алфавиту, чем v1_create_bands.sql, и тогда тест пройден.
Добавлять РЕШЕНО в заголовок сообщения недопустимо. Если вы нашли решение, вы можете принять ответ, который его вам дал (даже если это ваш собственный ответ — подробности см. в разделе Могу ли я ответить на свой вопрос?). Я откатил ваше редактирование.